def test_migrated_entity_unchanged(self):
        e = MigratedEntity(mock.Mock(), mock.Mock(), MockData.get_fake_node(), MockData.get_fake_entity())

        action, result = e.save()

        self.assertEquals(action, 'Unchanged')
        self.assertEquals(result, None)
    def test_migrated_entity_update(self):
        fake_node = MockData.get_fake_node('nNEWID')
        e = MigratedEntity(mock.Mock(), mock.Mock(), fake_node, MockData.get_fake_entity())

        action, result = e.save()

        self.assertEquals(action, 'Updated')
        self.assertEquals(result, {'agent_id': 'nNEWID', 'metadata': {'ck_node_id': 'nNEWID'}})
    def test_updates(self):
        fake_node = MockData.get_fake_node()
        fake_node.id = 'NEWID'
        self.ck_api.list_nodes.return_value = [fake_node]
        self.rs_api.list_entities.return_value = [MockData.get_fake_entity()]

        migrator = EntityMigrator(self.ck_api, self.rs_api, auto=True, logger=mock.Mock())
        entities = migrator.migrate()
        self.assertEquals(len(entities), 1)
        self.assertEquals(self.rs_api.update_entity.call_count, 1)
        self.assertEquals(self.rs_api.create_entity.call_count, 0)
    def test_wrapper(self):
        # init wrapper with fake API data
        fake_api_node = MockData.get_fake_api_node()
        node = Node(fake_api_node)

        # assert everything is okay
        self.assertEquals(node.id, fake_api_node.get('id'))
        self.assertEquals(node.label, fake_api_node.get('name'))
        self.assertEquals(node.agent_id, fake_api_node.get('id'))
        self.assertEquals(node.extra, {})
        self.assertEquals(node.ip_addresses, {'public0_v4': '50.50.50.50',
                                              'private1_v4': '5.6.7.8',
                                              'private0_v4': '1.2.3.4',
                                              'public1_v4': '60.60.60.60'})

        fake_api_node['name'] = 'NEWNAME'
        node = Node(fake_api_node)

        # assert everything is okay
        self.assertEquals(node.id, fake_api_node.get('id'))
        self.assertEquals(node.label, fake_api_node.get('name'))
        self.assertEquals(node.agent_id, fake_api_node.get('id'))
        self.assertEquals(node.extra, {})
        self.assertEquals(node.ip_addresses, {'public0_v4': '50.50.50.50',
                                              'private1_v4': '5.6.7.8',
                                              'private0_v4': '1.2.3.4',
                                              'public1_v4': '60.60.60.60'})
    def test_migrated_entity_new(self):
        e = MigratedEntity(mock.Mock(), mock.Mock(), MockData.get_fake_node())

        action, result = e.save()

        self.assertEquals(action, 'Created')
        self.assertEquals(result, {'agent_id': 'nFAKEID',
                                   'ip_addresses': {'private0_v4': '1.2.3.4',
                                                    'private1_v4': '5.6.7.8',
                                                    'public0_v4': '50.50.50.50',
                                                    'public1_v4': '60.60.60.60'},
                                    'label': 'FAKE_NAME',
                                    'metadata': {'ck_node_id': 'nFAKEID'}})
    def test_mixed(self):
        # Should be unchanged
        unchanged_node = MockData.get_fake_node()
        unchanged_entity = MockData.get_fake_entity()

        # should get created
        new_node = MockData.get_fake_node('NEWID')
        new_node.ip_addresses = {"public0_v4": "totally_different_ip"}

        # should get updated
        updated_node = MockData.get_fake_node('NEWID2')
        updated_node.ip_addresses = {"public0_v4": "updated"}
        updated_entity = MockData.get_fake_entity()
        updated_entity.ip_addresses = [("public0_v4", "updated")]

        self.ck_api.list_nodes.return_value = [unchanged_node, updated_node, new_node]
        self.rs_api.list_entities.return_value = [unchanged_entity, updated_entity]

        migrator = EntityMigrator(self.ck_api, self.rs_api, auto=True, logger=mock.Mock())
        entities = migrator.migrate()

        self.assertEquals(len(entities), 3)
        self.assertEquals(self.rs_api.update_entity.call_count, 1)
        self.assertEquals(self.rs_api.create_entity.call_count, 1)