def test_all_fields_are_accessible_through_attributes(self):
        kp = keypairs.KeyPair()

        try:
            for field in kp.FIELDS:
                getattr(kp, field)
        except AttributeError:
            self.fail("KeyPair object must have all fields accessible as "
                      "attributes")
    def test_non_existing_user_does_not_break_migration(self, _):
        db_broker = mock.Mock()
        db_broker.get_all_keypairs.return_value = [keypairs.KeyPair(),
                                                   keypairs.KeyPair()]

        tkp = tcr.TransportKeyPairs(init=mock.MagicMock(),
                                    kp_db_broker=db_broker)

        tkp.src_cloud = mock.MagicMock()
        tkp.dst_cloud = mock.MagicMock()
        tkp.cfg = mock.Mock()
        tkp.cfg.migrate.skip_orphaned_keypairs = True

        src_users = tkp.src_cloud.resources[
            utl.IDENTITY_RESOURCE].keystone_client.users
        src_users.find.side_effect = keystoneclient.exceptions.NotFound

        dst_users = tkp.dst_cloud.resources[
            utl.IDENTITY_RESOURCE].keystone_client.users
        dst_users.find.side_effect = keystoneclient.exceptions.NotFound

        tkp.run()
    def test_key_pair_has_dict_support(self):
        try:
            kp = keypairs.KeyPair()

            public_key_value = "random public key"
            fingerprint_value = "fingerprint"
            deleted_value = 1

            kp['public_key'] = public_key_value
            kp['fingerprint'] = fingerprint_value
            kp['deleted'] = deleted_value

            self.assertEqual(kp['public_key'], public_key_value)
            self.assertEqual(kp['fingerprint'], fingerprint_value)
            self.assertEqual(kp['deleted'], deleted_value)
        except KeyError:
            self.fail("Key pair fields must be settable as dict item")
    def test_fields_are_settable_as_attributes(self):
        try:
            kp = keypairs.KeyPair()

            public_key_value = "random public key"
            fingerprint_value = "fingerprint"
            deleted_value = 1

            kp.public_key = public_key_value
            kp.fingerprint = fingerprint_value
            kp.deleted = deleted_value

            self.assertEqual(kp.public_key, public_key_value)
            self.assertEqual(kp.fingerprint, fingerprint_value)
            self.assertEqual(kp.deleted, deleted_value)
        except AttributeError:
            self.fail("Key pair fields must be settable as attributes")
    def test_update_sql_gets_called_for_each_keypair(self):
        num_keypairs = 5

        db_broker = mock.Mock()
        db_broker.get_all_keypairs.return_value = [
            keypairs.KeyPair() for _ in xrange(num_keypairs)]
        db_broker.store_keypair = mock.Mock()

        tkp = tcr.TransportKeyPairs(init=mock.MagicMock(),
                                    kp_db_broker=db_broker)
        tkp.src_cloud = mock.MagicMock()
        tkp.dst_cloud = mock.MagicMock()
        tkp.cfg = mock.Mock()
        tkp.cfg.migrate.skip_orphaned_keypairs = True

        tkp.run()

        self.assertTrue(db_broker.store_keypair.call_count == num_keypairs)