From 205c71575c272a685011c641a33d26cf66cf60a0 Mon Sep 17 00:00:00 2001
From: gcontini <1121667+gcontini@users.noreply.github.com>
Date: 周一, 10 2月 2020 05:01:07 +0800
Subject: [PATCH] fix unit test with old versions of boost

---
 src/library/pc_identifier/default_strategy.cpp |   71 ++++++++++++++++++++++++++++-------
 1 files changed, 57 insertions(+), 14 deletions(-)

diff --git a/src/library/pc_identifier/default_strategy.cpp b/src/library/pc_identifier/default_strategy.cpp
index afa961f..0ef4561 100644
--- a/src/library/pc_identifier/default_strategy.cpp
+++ b/src/library/pc_identifier/default_strategy.cpp
@@ -1,35 +1,78 @@
 /*
  * default_strategy.cpp
  *
- *  Created on: Jan 2, 2020
+ *  Created on: Jan 1, 2020
  *      Author: devel
  */
 
+#include <vector>
+#include "pc_identifier_facade.hpp"
+#include "../os/execution_environment.hpp"
 #include "default_strategy.hpp"
 
+using namespace std;
 namespace license {
+namespace pc_identifier {
 
-DefaultStrategy::DefaultStrategy() {
-	// TODO Auto-generated constructor stub
+static vector<LCC_API_IDENTIFICATION_STRATEGY> available_strategies() {
+	ExecutionEnvironment exec;
+	VIRTUALIZATION virtualization = exec.getVirtualization();
+	vector<LCC_API_IDENTIFICATION_STRATEGY> strategy_to_try;
+	if (virtualization == CONTAINER) {
+		if (exec.is_docker()) {
+			strategy_to_try = LCC_DOCKER_STRATEGIES;
+		} else {
+			strategy_to_try = LCC_LXC_STRATEGIES;
+		}
+	} else if (virtualization == VM) {
+		if (exec.is_cloud()) {
+			strategy_to_try = LCC_CLOUD_STRATEGIES;
+		} else {
+			strategy_to_try = LCC_VM_STRATEGIES;
+		}
+	} else {
+		strategy_to_try = LCC_BARE_TO_METAL_STRATEGIES;
+	}
+	return strategy_to_try;
 }
 
-DefaultStrategy::~DefaultStrategy() {
-	// TODO Auto-generated destructor stub
+DefaultStrategy::DefaultStrategy() {}
+
+DefaultStrategy::~DefaultStrategy() {}
+
+LCC_API_IDENTIFICATION_STRATEGY DefaultStrategy::identification_strategy() const { return STRATEGY_DEFAULT; }
+
+FUNCTION_RETURN DefaultStrategy::identify_pc(PcIdentifier& pc_id) const {
+	vector<LCC_API_IDENTIFICATION_STRATEGY> strategy_to_try = available_strategies();
+	FUNCTION_RETURN ret = FUNC_RET_NOT_AVAIL;
+	for (auto it : strategy_to_try) {
+		LCC_API_IDENTIFICATION_STRATEGY strat_to_try = it;
+		unique_ptr<IdentificationStrategy> strategy_ptr = IdentificationStrategy::get_strategy(strat_to_try);
+		ret = strategy_ptr->identify_pc(pc_id);
+		if (ret == FUNC_RET_OK) {
+			break;
+		}
+	}
+	return ret;
 }
 
-DefaultStrategy::DefaultStrategy(const DefaultStrategy& other) {
-	// TODO Auto-generated constructor stub
+std::vector<PcIdentifier> DefaultStrategy::alternative_ids() const {
+	vector<LCC_API_IDENTIFICATION_STRATEGY> strategy_to_try = available_strategies();
+	vector<PcIdentifier> identifiers;
+	FUNCTION_RETURN ret = FUNC_RET_NOT_AVAIL;
+	for (auto it : strategy_to_try) {
+		LCC_API_IDENTIFICATION_STRATEGY strat_to_try = it;
+		unique_ptr<IdentificationStrategy> strategy_ptr = IdentificationStrategy::get_strategy(strat_to_try);
+		vector<PcIdentifier> alt_ids = strategy_ptr->alternative_ids();
+		identifiers.insert(alt_ids.begin(), alt_ids.end(), identifiers.end());
+	}
+	return identifiers;
 }
 
-IDENTIFICATION_STRATEGY DefaultStrategy::identification_strategy() const { return STRATEGY_DEFAULT; }
-
-void DefaultStrategy::identify_pc(PcIdentifier& identifier) const {}
-
-std::vector<PcIdentifier> DefaultStrategy::alternative_ids() const {}
-
-EVENT_TYPE DefaultStrategy::validate_identifier(const PcIdentifier& identifier) const {
+LCC_EVENT_TYPE DefaultStrategy::validate_identifier(const PcIdentifier& identifier) const {
 	// default strategy should always realize itself as a concrete strategy
 	return IDENTIFIERS_MISMATCH;
 }
 
+}  // namespace pc_identifier
 } /* namespace license */

--
Gitblit v1.9.1