void run()

in host/config/ConfiguratorAPITestBed/ConfiguratorAPITestBed.cpp [137:547]


void run(int argc, char *argv[])
{
    tal::GlobalInitialize();
    boost::shared_ptr<void> guardTal( static_cast<void*>(0), boost::bind(tal::GlobalShutdown) );

    MaskRequiredSignals();
	LocalConfigurator lconfigurator ;
    std::map<string, string> options;
    do
    {
        if (argc < 2)
        {
            usage(argv[0]);
            break;
        }

        if ((0 == stricmp(argv[1], "--h")) || (0 == stricmp(argv[1], "--help" )))
        {
            usage(argv[0]);
            break;
        }
        else if (0 == stricmp(argv[1], "--default"))
        {
            try
            {
				ConfigSource configSource = FETCH_SETTINGS_FROM_CX;
				if ((argc > 2) && (0 == stricmp(argv[2], "--fromcache")))
				{
					cout << "Parsing cache setting \n\n";
					configSource = USE_ONLY_CACHE_SETTINGS;
				}
                cout << "PARSING INITIAL SETTINGS START" << endl;
                cout << "------------------------------" << endl;
                cout << endl << endl;
                //Configurator * configurator = 0;
                std::string configcachepath ;
                SerializeType_t serializerType = lconfigurator.getSerializerType() ;
            
                if (!InitializeConfigurator(&TheConfigurator,configSource, serializerType,configcachepath))
                {
                    std::cout << "Failed to get the configurator" << std::endl;
                    break;
                }
				TheConfigurator->GetCurrentSettings() ;
                cout << "PARSING INITIAL SETTINGS END" << endl;
                cout << "----------------------------" << endl;
                //TheConfigurator = configurator;
            }
            catch( std::exception const& e ) {
                std::cout << "exception: " << e.what() << std::endl;
                break;
            }
        }
        else if (0 == stricmp(argv[1], "--custom"))
        {
            if (argc != 8) {
                usage(argv[0]);
                break;
            }
            for (int i=2;i < 8; i+=2)
                options[argv[i]] = argv[i+1];
            std::map<string, string>::iterator endit = options.end();
            if ((options.find("--ip") == endit) || (options.find("--port") == endit) ||
                (options.find("--hostid") == endit))
            {
                usage(argv[0]);
                break;
            }
            try
            {
                cout << "PARSING INITIAL SETTINGS START" << endl;
                cout << "------------------------------" << endl;
                int const port = atoi(options["--port"].c_str());
                if(!InitializeConfigurator(&TheConfigurator,options["--ip"], port, options["--hostid"] ))
                {
                    std::cout << "Failed to get configurator" << std::endl;
                    break;
                }
                cout << "PARSING INITIAL SETTINGS END" << endl;
                cout << "----------------------------" << endl;
                cout << endl;
                //TheConfigurator = configurator;
            }
            catch( std::exception const& e ) {
                std::cout << "exception: " << e.what() << std::endl;
                break;
            }
        }
        else if (boost::iequals(std::string(argv[1]), std::string("--SourceHealth")))
        {
            ConfigSource configSource = FETCH_SETTINGS_FROM_CX;
            cout << "Parsing cache setting \n\n";
            configSource = USE_ONLY_CACHE_SETTINGS;
            std::string configcachepath;
            SerializeType_t serializerType = lconfigurator.getSerializerType();

            if (!InitializeConfigurator(&TheConfigurator, configSource, serializerType, configcachepath))
            {
                std::cout << "Failed to get the configurator" << std::endl;
                break;
            }
			bool bV2AProvider = true;
			char choice_provider;
			std::string strHostId;
			std::cout << std::endl << "Is this for V2A (y/n)(default:y)? "; std::cin >> choice_provider;
			if ((choice_provider == 'y') || (choice_provider == 'Y'))
			{
				bV2AProvider = true;
			}
			else
			{
				bV2AProvider = false;
				std::cout << std::endl << "Enter HostId of the Protected Source Machine : "; std::cin >> strHostId;
			}
            char option;
            int numOfDisks;
            std::vector<std::string>vDiskSignatures;
            std::string strDiskSignature;
            bool bCanDiskLevelHealthIssuesbeGenerated = true;
            cout << "Do you want to generate Disk Level Health Issues. (y/n)?"; cin >> option;
            if ((option == 'y') || (option == 'Y'))
            {
                cout << endl << "On How many disks you want to generate Disk Level Health Issues?"; cin >> numOfDisks;
                for (int i = 0; i < numOfDisks; i++)
                {
                    cout << endl << "Enter the disk signature of Disk" << i << ":"; cin >> strDiskSignature;
                    strDiskSignature = std::string("{") + strDiskSignature + std::string("}");
                    cout << endl << "Disk Id:" << strDiskSignature;
                    vDiskSignatures.push_back(strDiskSignature);
                }
            }
            else
            {
                cout << endl << "No Disk Level Health Issues can be generated." << endl;
                bCanDiskLevelHealthIssuesbeGenerated = false;
            }
            bool bHealthIssues = true;
            do
            {
                cout << "Choose options for issuing Health Issues to Cx >> " << endl;
                cout << "(0) -- Clear all Health Issues." << endl;
                cout << "(1) -- VM Level: VSS Writer Health Issue." << endl;
                cout << "(2) -- VM Level: VSS Provider Health Issue." << endl;
                cout << "(3) -- Disk Level: Peak Churn Health Issue." << endl;
                cout << "(4) -- Disk Level: High Latency Health Issue." << endl;
                cout << "(5) -- Disk Level: Peak Churn + High Latency Health Issue." << endl;
                cout << "(6) -- VM + Disk Level: Peak Churn + VSS Writer Health Issue." << endl;
                cout << "(7) -- VM + Disk Level: Peak Churn + VSS Provider Health Issue." << endl;
                cout << "(8) -- VM + Disk Level: High Latency + VSS Writer Health Issue." << endl;
                cout << "(9) -- VM + Disk Level: High Latency + VSS Provider Health Issue." << endl;
                cout << "(10) -- VM + Disk Level: High Latency + Peak Churn + VSS Writer Health Issue." << endl;
                cout << "(11) -- VM + Disk Level: High Latency + Peak Churn + VSS Provider Health Issue." << endl;
                cout << "(12) -- VM + Disk Level: High Latency + Peak Churn + VSS Writer + VSS Provider Health Issue." << endl;
                cout << "(20) -- Do you want to continue?  \n"<< endl;
                cout << "\nEnter option : >>";
                int choose;
                cin >> choose;
                switch (choose)
                {
                    case 0://"(0) -- Clear all Health Issues"
                    {
                        SourceAgentProtectionPairHealthIssues Health;
                        ClearAllHealthIssues(Health);
                        break;
                    }
                    case 1://"(1) -- VM Level: VSS Writer Health Issue."
                    {
                        //VSS Writer Health Issue
                        SourceAgentProtectionPairHealthIssues Health;
                        PopulateVSSWriter(Health);
                        //PostHealthIssues(Health,strHostId,bV2AProvider);
                        PostHealthIssues(Health);
                        break;
                    }
                    case 2://"(2) -- VM Level: VSS Provider Health Issue."
                    {
                        //Vss Provider Health Issue
                        SourceAgentProtectionPairHealthIssues Health;
                        PopulateVSSProvider(Health);
                        //PostHealthIssues(Health,strHostId,bV2AProvider);
                        PostHealthIssues(Health);
                        break;
                    }
                    case 3://"(3) -- Disk Level: Peak Churn Health Issue."
                    {
                        //Peak Churn Health Issue
                        SourceAgentProtectionPairHealthIssues Health;
                        PopulatePeakChurn(Health, vDiskSignatures, bCanDiskLevelHealthIssuesbeGenerated);
                        //PostHealthIssues(Health,strHostId,bV2AProvider);
                        PostHealthIssues(Health);
                        break;
                    }
                    case 4://"(4) -- Disk Level: High Latency Health Issue." 
                    {
                        //High Latency Health Issue
                        SourceAgentProtectionPairHealthIssues Health;
                        PopulateHighLatency(Health, vDiskSignatures, bCanDiskLevelHealthIssuesbeGenerated);
                        //PostHealthIssues(Health,strHostId,bV2AProvider);
                        PostHealthIssues(Health);
                        break;
                    }
                    case 5://"(5) -- Disk Level: Peak Churn + High Latency Health Issue." 
                    {
                        SourceAgentProtectionPairHealthIssues Health;
                        PopulatePeakChurn(Health, vDiskSignatures, bCanDiskLevelHealthIssuesbeGenerated);
                        PopulateHighLatency(Health, vDiskSignatures, bCanDiskLevelHealthIssuesbeGenerated);
                        //PostHealthIssues(Health,strHostId,bV2AProvider);
                        PostHealthIssues(Health);
                        break;
                    }
                    case 6://"(6) -- VM + Disk Level: Peak Churn + VSS Writer Health Issue."
                    {
                        SourceAgentProtectionPairHealthIssues Health;
                        PopulatePeakChurn(Health, vDiskSignatures, bCanDiskLevelHealthIssuesbeGenerated);
                        PopulateVSSWriter(Health);
                        //PostHealthIssues(Health,strHostId,bV2AProvider);
                        PostHealthIssues(Health);
                        break;
                    }
                    case 7://"(7) -- VM + Disk Level: Peak Churn + VSS Provider Health Issue."
                    {
                        SourceAgentProtectionPairHealthIssues Health;
                        PopulatePeakChurn(Health, vDiskSignatures, bCanDiskLevelHealthIssuesbeGenerated);
                        PopulateVSSProvider(Health);
                        //PostHealthIssues(Health,strHostId,bV2AProvider);
                        PostHealthIssues(Health);
                        break;
                    }
                    case 8://"(8) -- VM + Disk Level: High Latency + VSS Writer Health Issue."
                    {
                        SourceAgentProtectionPairHealthIssues Health;
                        PopulateHighLatency(Health, vDiskSignatures, bCanDiskLevelHealthIssuesbeGenerated);
                        PopulateVSSWriter(Health);
                        //PostHealthIssues(Health,strHostId,bV2AProvider);
                        PostHealthIssues(Health);
                        break;
                    }
                    case 9://"(9) -- VM + Disk Level: High Latency + VSS Provider Health Issue." 
                    {
                        SourceAgentProtectionPairHealthIssues Health;
                        PopulateHighLatency(Health, vDiskSignatures, bCanDiskLevelHealthIssuesbeGenerated);
                        PopulateVSSProvider(Health);
                        //PostHealthIssues(Health,strHostId,bV2AProvider);
                        PostHealthIssues(Health);
                        break;
                    }
                    case 10://"(10) -- VM + Disk Level: High Latency + Peak Churn + VSS Writer Health Issue." 
                    {
                        SourceAgentProtectionPairHealthIssues Health;
                        PopulateHighLatency(Health, vDiskSignatures, bCanDiskLevelHealthIssuesbeGenerated);
                        PopulatePeakChurn(Health, vDiskSignatures, bCanDiskLevelHealthIssuesbeGenerated);
                        PopulateVSSWriter(Health);
                        //PostHealthIssues(Health,strHostId,bV2AProvider);
                        PostHealthIssues(Health);
                        break;
                    }
                    case 11://"(11) -- VM + Disk Level: High Latency + Peak Churn + VSS Provider Health Issue."
                    {
                        SourceAgentProtectionPairHealthIssues Health;
                        PopulateHighLatency(Health, vDiskSignatures, bCanDiskLevelHealthIssuesbeGenerated);
                        PopulatePeakChurn(Health, vDiskSignatures, bCanDiskLevelHealthIssuesbeGenerated);
                        PopulateVSSProvider(Health);
                        //PostHealthIssues(Health,strHostId,bV2AProvider);
                        PostHealthIssues(Health);
                        break;
                    }
                    case 12://"(12) -- VM + Disk Level: High Latency + Peak Churn + VSS Writer + VSS Provider Health Issue."
                    {
                        SourceAgentProtectionPairHealthIssues Health;
                        PopulateHighLatency(Health, vDiskSignatures, bCanDiskLevelHealthIssuesbeGenerated);
                        PopulatePeakChurn(Health, vDiskSignatures, bCanDiskLevelHealthIssuesbeGenerated);
                        PopulateVSSWriter(Health);
                        PopulateVSSProvider(Health);
                        //PostHealthIssues(Health,strHostId,bV2AProvider);
                        PostHealthIssues(Health);
                        break;
                    }
                    case 20://"(20) -- VM Level: VSS Writer Health Issue."
                    {
                        char opt;
                        cout << endl << "Do you want to continue(y:Exit/n:Continue)? "; cin >> opt;
                        if ((opt == 'y') || (opt == 'Y'))
                        {
                            bHealthIssues = false;
                            exit(0);
                        };
                        break;
                    }
                }
            } while (bHealthIssues);
        }
        else
        {
            cout << "Error..." << endl;
            usage(argv[0]);
            break;
        }

        cout << "Choose options for getting Cx settings >> "  << endl;
        cout << "(1) -- All settings" << endl;
        cout << "(2) -- Initial Settings" << endl;
        cout << "(3) -- Snapshot Settings" << endl;
        cout << "(4) -- getReplicationPairInfo" << endl;
        cout << "(5) -- postHealthIssues" << endl;
        cout << "\nEnter option : >>";
        int choose;
        cin >> choose;
        switch (choose)
        {
        case 1:
            {
                TestGetInitialSettings* tgis = static_cast<TestGetInitialSettings*>(TheConfigurator);
                if (tgis)
                    tgis->Print();
                TestSnapshotAPIs tSnapApis;
                tSnapApis.TestGetSnapshotRequestFromCx();
                break;
            }
        case 2:
            {
                TestGetInitialSettings* tgis = static_cast<TestGetInitialSettings*>(TheConfigurator);
                if (tgis)
                    tgis->Print();
                break;
            }
        case 3:
            {
                TestSnapshotAPIs tSnapApis;
                tSnapApis.TestGetSnapshotRequestFromCx();
                break;
            }
        case 4:
            {
                std::map<std::string, std::string> map_info;
                map_info = TheConfigurator->getReplicationPairInfo("imitswks105");
                std::map<std::string, std::string>::iterator it = map_info.begin();
                for (;it != map_info.end(); it++)
                    cout << "first = " << it->first << ", second = " << it->second << endl;
            }
        case 5:
        {
            SourceAgentProtectionPairHealthIssues agentHealth;
            std::vector<HealthIssue> aglHealthIssues;
            //Vss Writer HealthIssue
            std::map<std::string, std::string> vssWriterParams1;
            vssWriterParams1.insert({ AgentHealthIssueCodes::VMLevelHealthIssues::VssWriterFailure::HealthCode,"ECH00031" });
            vssWriterParams1.insert({ AgentHealthIssueCodes::VMLevelHealthIssues::VssWriterFailure::ErrorCode,"0x8004230c" });
            vssWriterParams1.insert({ AgentHealthIssueCodes::VMLevelHealthIssues::VssWriterFailure::Operation,"Snapshot" });
            vssWriterParams1.insert({ AgentHealthIssueCodes::VMLevelHealthIssues::VssWriterFailure::WriteName,"SQL VSS Writer" });
            //HealthIssue hiVssWriter1(std::string("ECH00031"), vssWriterParams1);

            //aglHealthIssues.push_back(hiVssWriter1);
            //agentHealth.HealthIssues = aglHealthIssues;
            //cout << endl << "Posting only one Agentlevel Health Issue..." << endl;
            //TheConfigurator->getVxAgent().ReportAgentHealthStatus(agentHealth);

            //Vss Writer Health Issue;
            std::map<std::string, std::string> vssWriterParams2;
            vssWriterParams2.insert({AgentHealthIssueCodes::VMLevelHealthIssues::VssWriterFailure::HealthCode,"ECH00031"});
            vssWriterParams2.insert({ AgentHealthIssueCodes::VMLevelHealthIssues::VssWriterFailure::ErrorCode,"0x8004233c" });
            vssWriterParams2.insert({ AgentHealthIssueCodes::VMLevelHealthIssues::VssWriterFailure::Operation,"Backup" });
            vssWriterParams2.insert({ AgentHealthIssueCodes::VMLevelHealthIssues::VssWriterFailure::WriteName,"Sharepoint VSS Writer" });
            HealthIssue hiVssWriter2(std::string("ECH00031"), vssWriterParams2);
            //aglHealthIssues.push_back(hiVssWriter2);
           // agentHealth.HealthIssues = aglHealthIssues;
            //cout << endl << "Posting two  Agentlevel Health Issues..." << endl;
            //TheConfigurator->getVxAgent().ReportAgentHealthStatus(agentHealth);

           //Vss Provider Health Issue
            HealthIssue hiVssProvider(std::string("ECH00030"), std::map<std::string, std::string>());
            
            
            //aglHealthIssues.push_back(hiVssProvider);//agent level health issues
            //agentHealth.HealthIssues = aglHealthIssues;
            //cout << endl << "Posting three  Agentlevel Health Issues..." << endl;
            //TheConfigurator->getVxAgent().ReportAgentHealthStatus(agentHealth);

            std::vector<AgentDiskLevelHealthIssue> dlHealthIssues;//disk level health issues
            std::map<std::string, std::string>peakChurnParams;
            peakChurnParams.insert({ AgentHealthIssueCodes::DiskLevelHealthIssues::PeakChurn::HealthCode,"SourceAgentPeakChurnObserved" });
            peakChurnParams.insert({ AgentHealthIssueCodes::DiskLevelHealthIssues::PeakChurn::ChurnRate,"60 MBPS" });
            peakChurnParams.insert({ AgentHealthIssueCodes::DiskLevelHealthIssues::PeakChurn::UploadPending,"200 MB" });
            peakChurnParams.insert({ AgentHealthIssueCodes::DiskLevelHealthIssues::PeakChurn::ObservationTime,"2019-Jul-15 18:41:00" });
            AgentDiskLevelHealthIssue hiPeakChurn(std::string("{4087759736}"), AgentHealthIssueCodes::DiskLevelHealthIssues::PeakChurn::HealthCode, peakChurnParams);
            dlHealthIssues.push_back(hiPeakChurn);

            agentHealth.DiskLevelHealthIssues = dlHealthIssues;
            cout << endl << "Posting 3 Agent Level and 1 Disk Level Health Issues..." << endl;
            TheConfigurator->getVxAgent().ReportAgentHealthStatus(agentHealth);


            /*std::map<std::string, std::string>highLatencyParams;
            highLatencyParams.insert({ AgentHealthIssueCodes::DiskLevelHealthIssues::HighLatency::HealthCode,"SourceAgentHighLatencyObserved"});
            highLatencyParams.insert({ AgentHealthIssueCodes::DiskLevelHealthIssues::HighLatency::UploadPending,"205 MB" });
            highLatencyParams.insert({ AgentHealthIssueCodes::DiskLevelHealthIssues::HighLatency::ObservationTime,"2019-Jun-18 19:21:00" });
            AgentDiskLevelHealthIssue hiHighLatency(std::string("{3C48DD76-BE19-42A8-A8C7-5FD182E8E64B}"), AgentHealthIssueCodes::DiskLevelHealthIssues::HighLatency::HealthCode, highLatencyParams);
            dlHealthIssues.push_back(hiHighLatency);

            agentHealth.DiskLevelHealthIssues = dlHealthIssues;
            agentHealth.HealthIssues = aglHealthIssues;

            cout << endl << "Posting 3 Agent Level and 2 Disk Level Health Issues..." << endl;			
            TheConfigurator->getVxAgent().ReportAgentHealthStatus(agentHealth);*/
        }
            break;
        default:
            break;
        }
    }
    while (false);
}