def test_get_data(self, mock_get, mock_client):
     mock_client.return_value = None
     mock_get.return_value = None
     test_inv = SkytapInventory(None,None,None,"tests/config_fixtures/config_fixture_with_creds.ini")
     expected_calling_url = (u"https://_testfixture_.net/configurations/0000000.json")
     test_inv.get_data()
     mock_get.assert_called_once_with(expected_calling_url)
    def setUp(self):
        UnsetSkytapEnvironmentVarsTestCase.setUp(self)

        with(open("tests/dynamic_inventory_fixture_with_api_creds.json", "r")) as inv_creds_fh:
            with(open("tests/dynamic_inventory_fixture_no_api_creds.json", "r")) as inv_nocreds_fh:
                with(open("tests/api_response_fixture.json", "r")) as api_fh:
                    self.expected_inventory_with_api_creds = json.loads(inv_creds_fh.read())
                    self.expected_inventory_no_api_creds = json.loads(inv_nocreds_fh.read())
                    self.mock_api_response = json.loads(api_fh.read())

        self.test_instance_with_api_creds = SkytapInventory(None,None,None,"tests/config_fixtures/config_fixture_with_creds.ini")  
        self.test_instance_no_api_creds = SkytapInventory(None,None,None,"tests/config_fixtures/config_fixture_no_creds.ini")  
        self.test_instance_with_api_creds.get_data = MagicMock(return_value=self.mock_api_response)
        self.test_instance_no_api_creds.get_data = MagicMock(return_value=self.mock_api_response)
class TestParseMethods(UnsetSkytapEnvironmentVarsTestCase):
    def setUp(self):
        UnsetSkytapEnvironmentVarsTestCase.setUp(self)

        with(open("tests/dynamic_inventory_fixture_with_api_creds.json", "r")) as inv_creds_fh:
            with(open("tests/dynamic_inventory_fixture_no_api_creds.json", "r")) as inv_nocreds_fh:
                with(open("tests/api_response_fixture.json", "r")) as api_fh:
                    self.expected_inventory_with_api_creds = json.loads(inv_creds_fh.read())
                    self.expected_inventory_no_api_creds = json.loads(inv_nocreds_fh.read())
                    self.mock_api_response = json.loads(api_fh.read())

        self.test_instance_with_api_creds = SkytapInventory(None,None,None,"tests/config_fixtures/config_fixture_with_creds.ini")  
        self.test_instance_no_api_creds = SkytapInventory(None,None,None,"tests/config_fixtures/config_fixture_no_creds.ini")  
        self.test_instance_with_api_creds.get_data = MagicMock(return_value=self.mock_api_response)
        self.test_instance_no_api_creds.get_data = MagicMock(return_value=self.mock_api_response)

    def test_correct_empty_inventory(self): 
        testObj = SkytapInventory(None,None,None,"tests/config_fixtures/config_fixture_with_creds.ini")
        knownGood = {"_meta":{"hostvars":{}}}
        self.assertDictEqual(knownGood, testObj.empty_inventory)

    
    def test_ansible_config_vars_set(self):
        known_good = {u"ansible_ssh_host": u"_ANSIBLE-SSH-HOST_",
                        u"ansible_ssh_pass": u"_ANSIBLE-SSH-PASS_",
                        u"ansible_ssh_port": u"65535",
                        u"ansible_ssh_private_key_file": u"_ANSIBLE-SSH-PRIVATE-KEY-FILE_",
                        u"ansible_ssh_user": u"_ANSIBLE-SSH-USER_"}
        actual = self.test_instance_no_api_creds.ansible_config_vars
        self.assertDictEqual(known_good, actual)


    def test_skytap_vars_from_inventory(self):
        known_good = {u"api_token": u"HORSERADISH",
                        u"base_url": u"CUCUMBER",
                        u"username": u"POTATO"}

        os.environ['SKYTAP_API_TOKEN'] = 'HORSERADISH'
        os.environ['SKYTAP_BASE_URL'] = 'CUCUMBER'
        os.environ['SKYTAP_USERNAME'] = '******'
        os.environ['SKYTAP_CONFIGURATION_ID'] = 'BEET'

        actual = SkytapInventory().skytap_vars
        self.assertDictEqual(known_good, actual)

    def test_skytap_vars(self):
        known_good = {u"api_token": u"abcdefghijklmnopqrstuvwxyz01234567890abcef",
                        u"base_url": u"https://_testfixture_.net",
                        u"username": u"_SKYTAP-USERNAME_"}
        actual = self.test_instance_no_api_creds.skytap_vars
        self.assertDictEqual(known_good, actual)


    def test_skytap_env_vars(self):
        known_good =  {u"configuration_id": u"0000000", 
                       u"network_type": u"nat_vpn",
                       u"network_connection_id": None,
                       u'use_api_credentials':True,
                       u'skytap_vm_username':u'_FAKEUSER_',
                       u'api_credential_delimiter':u'/'}
        actual = self.test_instance_with_api_creds.skytap_env_vars
        self.assertDictEqual(known_good, actual)


    def test_parse_vpn_ips(self):
        mock_api_data = self.test_instance_with_api_creds.get_data() #fixture data; either test instance works
        
        actual_result_with_creds = \
                self.test_instance_with_api_creds.build_vpn_ip_group(mock_api_data, self.test_instance_with_api_creds.inventory)
        self.assertDictEqual(self.expected_inventory_with_api_creds, actual_result_with_creds)
        
        actual_result_no_creds = \
                self.test_instance_no_api_creds.build_vpn_ip_group(mock_api_data, self.test_instance_no_api_creds.inventory)
        self.assertDictEqual(self.expected_inventory_no_api_creds, actual_result_no_creds)


    def test_parse_private_ips(self):
        mock_api_data = self.test_instance_with_api_creds.get_data() #fixture data; either test instance works
        
        actual_result_with_creds = \
                self.test_instance_with_api_creds.build_private_ip_group(mock_api_data, self.test_instance_with_api_creds.inventory)
        self.assertDictEqual(self.expected_inventory_with_api_creds, actual_result_with_creds)

        actual_result_no_creds = \
                self.test_instance_no_api_creds.build_private_ip_group(mock_api_data, self.test_instance_no_api_creds.inventory)
        self.assertDictEqual(self.expected_inventory_no_api_creds, actual_result_no_creds)


    def test_parse_icnr_ips(self):
        mock_api_data = self.test_instance_with_api_creds.get_data() #fixture data; either test instance works 

        actual_result_with_creds = \
                self.test_instance_with_api_creds.build_icnr_ip_group(mock_api_data, self.test_instance_with_api_creds.inventory)
        self.assertDictEqual(self.expected_inventory_with_api_creds, actual_result_with_creds)

        actual_result_no_creds = \
                self.test_instance_no_api_creds.build_icnr_ip_group(mock_api_data, self.test_instance_no_api_creds.inventory)
        self.assertDictEqual(self.expected_inventory_no_api_creds, actual_result_no_creds)


    #end-to-end test with one of the credentials parsing methods
    def test_run_as_script(self):
        actual_result = json.loads(SkytapInventory.run_as_script(self.test_instance_with_api_creds))
        self.assertDictEqual(self.expected_inventory_with_api_creds, actual_result) 
 def test_run_as_script(self):
     actual_result = json.loads(SkytapInventory.run_as_script(self.test_instance_with_api_creds))
     self.assertDictEqual(self.expected_inventory_with_api_creds, actual_result)