Beispiel #1
0
 def test_update_port_name(self):
     nic = dbmf.NetworkInterfaceFactory(device_owner='vm')
     url = join_urls(PORTS_URL, str(nic.id))
     request = {'port': {"name": u"test-name\u2601\u2602"}}
     response = self.put(url, params=json.dumps(request), user=nic.userid)
     self.assertEqual(response.status_code, 200)
     res = json.loads(response.content)
     self.assertEqual(res['port']['name'], u"test-name\u2601\u2602")
Beispiel #2
0
 def test_remove(self, client):
     vm = mfactory.VirtualMachineFactory(flavor__cpu=1, flavor__ram=128)
     mfactory.VolumeFactory(userid=vm.userid, machine=vm, size=1)
     mfactory.VolumeFactory(userid=vm.userid, machine=vm, size=3)
     # Also create a NIC
     ip = mfactory.IPv4AddressFactory(nic__machine=vm)
     nic = ip.nic
     with transaction.atomic():
         nic.network.get_ip_pools()[0].reserve(nic.ipv4_address)
     msg = self.create_msg(operation='OP_INSTANCE_REMOVE',
                           instance=vm.backend_vm_id)
     with mocked_quotaholder() as m:
         update_db(client, msg)
     self.assertTrue(client.basic_ack.called)
     db_vm = VirtualMachine.objects.get(id=vm.id)
     self.assertEqual(db_vm.operstate, 'DESTROYED')
     self.assertTrue(db_vm.deleted)
     # Check that nics are deleted
     self.assertFalse(db_vm.nics.all())
     with transaction.atomic():
         self.assertTrue(nic.network.get_ip_pools()[0].is_available(ip.address))
     # Check that volumes are deleted
     self.assertFalse(db_vm.volumes.filter(deleted=False))
     # Check quotas
     name, args, kwargs = m.mock_calls[0]
     for (userid, res), value in args[1].items():
         if res == 'cyclades.disk':
             self.assertEqual(value, -4 << 30)
         elif res == 'cyclades.cpu':
             self.assertEqual(value, -1)
         elif res == 'cyclades.ram':
             self.assertEqual(value, -128 << 20)
     vm2 = mfactory.VirtualMachineFactory()
     fp1 = mfactory.IPv4AddressFactory(nic__machine=vm2, floating_ip=True,
                                       network__floating_ip_pool=True)
     network = fp1.network
     nic1 = mfactory.NetworkInterfaceFactory(machine=vm2)
     fp1.nic = nic1
     fp1.save()
     with transaction.atomic():
         pool = network.get_ip_pools()[0]
         pool.reserve(fp1.address)
         pool.save()
     msg = self.create_msg(operation='OP_INSTANCE_REMOVE',
                           instance=vm2.backend_vm_id)
     with mocked_quotaholder():
         update_db(client, msg)
     self.assertEqual(2, client.basic_ack.call_count)
     db_vm = VirtualMachine.objects.get(id=vm.id)
     self.assertEqual(db_vm.operstate, 'DESTROYED')
     self.assertTrue(db_vm.deleted)
     self.assertEqual(IPAddress.objects.get(id=fp1.id).nic, None)
     with transaction.atomic():
         pool = network.get_ip_pools()[0]
         # Test that floating ips are not released
         self.assertFalse(pool.is_available(fp1.address))
Beispiel #3
0
 def test_delete_port(self, mrapi):
     nic = dbmf.NetworkInterfaceFactory(device_owner='vm')
     url = join_urls(PORTS_URL, str(nic.id))
     mrapi().ModifyInstance.return_value = 42
     with override_settings(settings, GANETI_USE_HOTPLUG=True):
         response = self.delete(url, user=nic.userid)
     self.assertEqual(response.status_code, 204)
     with override_settings(settings, GANETI_USE_HOTPLUG=False):
         response = self.delete(url, user=nic.userid)
     self.assertEqual(response.status_code, 400)
Beispiel #4
0
    def setUp(self):
        settings.SKIP_SSH_VALIDATION = True
        settings.HELPDESK_ENABLED = True
        self.client = AuthClient()

        # init models
        vm1u1 = mfactory.VirtualMachineFactory(userid=USER1, name="user1 vm",
                                               pk=1001)
        vm1u2 = mfactory.VirtualMachineFactory(userid=USER2, name="user2 vm1",
                                               pk=1002)
        vm2u2 = mfactory.VirtualMachineFactory(userid=USER2, name="user2 vm2",
                                               pk=1003)

        netpub = mfactory.NetworkFactory(public=True)
        net1u1 = mfactory.NetworkFactory(public=False, userid=USER1)

        nic1 = mfactory.NetworkInterfaceFactory(machine=vm1u2, network=net1u1)
        nic2 = mfactory.NetworkInterfaceFactory(machine=vm1u1, network=netpub,
                                                ipv4="195.251.222.211")
Beispiel #5
0
 def test_get_network_building_nics(self, mrapi):
     net = mfactory.NetworkFactory()
     machine = mfactory.VirtualMachineFactory(userid=net.userid)
     mfactory.NetworkInterfaceFactory(network=net,
                                      machine=machine,
                                      state="BUILDING")
     response = self.myget('networks/%d' % net.id, net.userid)
     self.assertSuccess(response)
     api_net = json.loads(response.content)["network"]
     self.assertEqual(len(api_net["attachments"]), 0)
Beispiel #6
0
    def setUp(self):
        settings.SKIP_SSH_VALIDATION = True
        settings.HELPDESK_ENABLED = True
        self.client = AuthClient()

        # init models
        vm1u1 = mfactory.VirtualMachineFactory(userid=USER1,
                                               name="user1 vm",
                                               pk=1001)
        vm1u2 = mfactory.VirtualMachineFactory(userid=USER2,
                                               name="user2 vm1",
                                               pk=1002)
        vm2u2 = mfactory.VirtualMachineFactory(userid=USER2,
                                               name="user2 vm2",
                                               pk=1003)

        nic1 = mfactory.NetworkInterfaceFactory(machine=vm1u2,
                                                userid=vm1u2.userid,
                                                network__public=False,
                                                network__userid=USER1)
        nic2 = mfactory.NetworkInterfaceFactory(machine=vm1u2,
                                                userid=vm1u2.userid,
                                                network__public=False,
                                                network__userid=USER1)
        ip2 = mfactory.IPv4AddressFactory(nic__machine=vm1u1,
                                          userid=vm1u1.userid,
                                          network__public=True,
                                          network__userid=None,
                                          address="195.251.222.211")
        ipv6 = mfactory.IPv4AddressFactory(nic__machine=vm1u1,
                                           userid=vm1u1.userid,
                                           network__public=True,
                                           network__userid=None,
                                           address="2001:648:2ffc:200::184")
        mfactory.IPAddressLogFactory(address=ip2.address,
                                     server_id=vm1u1.id,
                                     network_id=ip2.network.id,
                                     active=True)
        mfactory.IPAddressLogFactory(address=ipv6.address,
                                     server_id=vm1u1.id,
                                     network_id=ipv6.network.id,
                                     active=True)
Beispiel #7
0
    def test_server_building_nics(self):
        db_vm = self.vm2
        user = self.vm2.userid
        net1 = mfactory.NetworkFactory()
        net2 = mfactory.NetworkFactory()
        net3 = mfactory.NetworkFactory()
        mfactory.NetworkInterfaceFactory(machine=self.vm2,
                                         network=net1,
                                         state="BUILD")
        nic2 = mfactory.NetworkInterfaceFactory(machine=self.vm2,
                                                network=net2,
                                                state="ACTIVE")
        mfactory.NetworkInterfaceFactory(machine=self.vm2,
                                         network=net3,
                                         state="BUILD")

        response = self.myget('servers/%d' % db_vm.id, user)
        server = json.loads(response.content)['server']
        nics = server["attachments"]
        self.assertEqual(len(nics), 1)
        self.assertEqual(nics[0]["network_id"], str(nic2.network_id))
Beispiel #8
0
 def test_remove_nic_malformed(self, mrapi):
     user = '******'
     vm = mfactory.VirtualMachineFactory(name='yo', userid=user)
     net = mfactory.NetworkFactory(state='ACTIVE', userid=user)
     nic = mfactory.NetworkInterfaceFactory(machine=vm, network=net)
     request = {
         'remove': {
             'att234achment': 'nic-%s-%s' % (vm.id, nic.index)
         }
     }
     response = self.mypost('networks/%d/action' % net.id, net.userid,
                            json.dumps(request), 'json')
     self.assertBadRequest(response)
Beispiel #9
0
 def test_remove(self, client):
     vm = mfactory.VirtualMachineFactory()
     # Also create a NIC
     mfactory.NetworkInterfaceFactory(machine=vm)
     msg = self.create_msg(operation='OP_INSTANCE_REMOVE',
                           instance=vm.backend_vm_id)
     with mocked_quotaholder():
         update_db(client, msg)
     client.basic_ack.assert_called_once()
     db_vm = VirtualMachine.objects.get(id=vm.id)
     self.assertEqual(db_vm.operstate, 'DESTROYED')
     self.assertTrue(db_vm.deleted)
     # Check that nics are deleted
     self.assertFalse(db_vm.nics.all())
Beispiel #10
0
 def test_remove_nic(self, mrapi):
     user = '******'
     vm = mfactory.VirtualMachineFactory(name='yo', userid=user)
     net = mfactory.NetworkFactory(state='ACTIVE', userid=user)
     nic = mfactory.NetworkInterfaceFactory(machine=vm, network=net)
     request = {'remove': {'attachment': 'nic-%s-%s' % (vm.id, nic.index)}}
     response = self.mypost('networks/%d/action' % net.id, net.userid,
                            json.dumps(request), 'json')
     self.assertEqual(response.status_code, 202)
     self.assertTrue(NetworkInterface.objects.get(id=nic.id).dirty)
     # Remove dirty nic
     response = self.mypost('networks/%d/action' % net.id, net.userid,
                            json.dumps(request), 'json')
     self.assertFault(response, 409, 'buildInProgress')
Beispiel #11
0
    def test_delete(self):
        """Test if the delete action succeeds/fails properly."""
        # Create a floating IP and force-attach it to a NIC instance.
        vm = mfactory.VirtualMachineFactory()
        nic = mfactory.NetworkInterfaceFactory(network=self.network,
                                               machine=vm)
        with mocked_quotaholder():
            ip = ips.create_floating_ip(self.credentials,
                                        network_id=self.network.id)
        ip.nic = nic
        ip.save()

        # Test 1 - Check if we can delete an IP attached to a VM.
        #
        # The validate function and the action should both fail with the
        # following message.
        expected_msg = "IP '{}' is used by server '{}'".format(ip.id, vm.id)

        # Verify that the validate function fails in silent mode.
        res, msg = ips.validate_ip_action(ip, "DELETE", silent=True)
        self.assertFalse(res)
        self.assertEqual(msg, expected_msg)

        # Verify that the validate function fails in non-silent mode.
        with self.assertRaises(faults.Conflict) as cm:
            ips.validate_ip_action(ip, "DELETE", silent=False)
        self.assertEqual(cm.exception.message, expected_msg)

        # Verify that the delete action fails with exception.
        with mocked_quotaholder():
            with self.assertRaises(faults.Conflict) as cm:
                ips.delete_floating_ip(ip.id, self.credentials)
        self.assertEqual(cm.exception.message, expected_msg)

        # Test 2 - Check if we can delete a free IP.
        #
        # Force-detach IP from NIC.
        ip.nic = None
        ip.save()

        # Verify that the validate function passes in silent mode.
        res, _ = ips.validate_ip_action(ip, "DELETE", silent=True)
        self.assertTrue(res)

        # Verify that the delete action succeeds.
        with mocked_quotaholder():
            ips.delete_floating_ip(ip.id, self.credentials)
        with self.assertRaises(ObjectDoesNotExist):
            IPAddress.objects.get(id=ip.id)
Beispiel #12
0
    def test_server_detail(self):
        """Test if a server details are returned."""
        db_vm = self.vm2
        user = self.vm2.userid
        net = mfactory.NetworkFactory()
        nic = mfactory.NetworkInterfaceFactory(machine=self.vm2,
                                               network=net,
                                               ipv6="::babe")

        db_vm_meta = mfactory.VirtualMachineMetadataFactory(vm=db_vm)

        response = self.myget('servers/%d' % db_vm.id, user)
        server = json.loads(response.content)['server']

        self.assertEqual(server['flavor']["id"], db_vm.flavor.id)
        self.assertEqual(server['hostId'], db_vm.hostid)
        self.assertEqual(server['id'], db_vm.id)
        self.assertEqual(server['image']["id"], db_vm.imageid)
        self.assertEqual(server['name'], db_vm.name)
        self.assertEqual(server['status'], get_rsapi_state(db_vm))
        api_nic = server['attachments'][0]
        self.assertEqual(api_nic['network_id'], str(net.id))
        self.assertEqual(api_nic['mac_address'], nic.mac)
        self.assertEqual(api_nic['firewallProfile'], nic.firewall_profile)
        self.assertEqual(api_nic['ipv4'], nic.ipv4)
        self.assertEqual(api_nic['ipv6'], nic.ipv6)
        self.assertEqual(api_nic['id'], 'nic-%s-%s' % (db_vm.id, nic.index))
        api_address = server["addresses"]
        self.assertEqual(api_address[str(net.id)], [{
            "version": 4,
            "addr": nic.ipv4,
            "OS-EXT-IPS:type": "fixed"
        }, {
            "version": 6,
            "addr": nic.ipv6,
            "OS-EXT-IPS:type": "fixed"
        }])

        metadata = server['metadata']
        self.assertEqual(len(metadata), 1)
        self.assertEqual(metadata[db_vm_meta.meta_key], db_vm_meta.meta_value)
        self.assertSuccess(response)
Beispiel #13
0
 def test_remove(self, client):
     vm = mfactory.VirtualMachineFactory()
     # Also create a NIC
     ip = mfactory.IPv4AddressFactory(nic__machine=vm)
     nic = ip.nic
     nic.network.get_ip_pools()[0].reserve(nic.ipv4_address)
     msg = self.create_msg(operation='OP_INSTANCE_REMOVE',
                           instance=vm.backend_vm_id)
     with mocked_quotaholder():
         update_db(client, msg)
     self.assertTrue(client.basic_ack.called)
     db_vm = VirtualMachine.objects.get(id=vm.id)
     self.assertEqual(db_vm.operstate, 'DESTROYED')
     self.assertTrue(db_vm.deleted)
     # Check that nics are deleted
     self.assertFalse(db_vm.nics.all())
     self.assertTrue(nic.network.get_ip_pools()[0].is_available(ip.address))
     vm2 = mfactory.VirtualMachineFactory()
     fp1 = mfactory.IPv4AddressFactory(nic__machine=vm2,
                                       floating_ip=True,
                                       network__floating_ip_pool=True)
     network = fp1.network
     nic1 = mfactory.NetworkInterfaceFactory(machine=vm2)
     fp1.nic = nic1
     fp1.save()
     pool = network.get_ip_pools()[0]
     pool.reserve(fp1.address)
     pool.save()
     msg = self.create_msg(operation='OP_INSTANCE_REMOVE',
                           instance=vm2.backend_vm_id)
     with mocked_quotaholder():
         update_db(client, msg)
     client.basic_ack.assert_called_once()
     db_vm = VirtualMachine.objects.get(id=vm.id)
     self.assertEqual(db_vm.operstate, 'DESTROYED')
     self.assertTrue(db_vm.deleted)
     self.assertEqual(IPAddress.objects.get(id=fp1.id).nic, None)
     pool = network.get_ip_pools()[0]
     # Test that floating ips are not released
     self.assertFalse(pool.is_available(fp1.address))
Beispiel #14
0
 def test_firewall(self, mrapi, mimage):
     vm = mfactory.VirtualMachineFactory()
     vm.operstate = "STOPPED"
     vm.save()
     request = {'firewallProfile': {'profile': 'PROTECTED'}}
     response = self.mypost('servers/%d/action' % vm.id, vm.userid,
                            json.dumps(request), 'json')
     self.assertBadRequest(response)
     request = {'firewallProfile': {'profile': 'PROTECTED', "nic": "10"}}
     response = self.mypost('servers/%d/action' % vm.id, vm.userid,
                            json.dumps(request), 'json')
     self.assertItemNotFound(response)
     request = {'firewallProfile': {'profile': 'PROTECTED', "nic": "error"}}
     response = self.mypost('servers/%d/action' % vm.id, vm.userid,
                            json.dumps(request), 'json')
     self.assertBadRequest(response)
     nic = mfactory.NetworkInterfaceFactory(machine=vm)
     request = {'firewallProfile': {'profile': 'PROTECTED', "nic": nic.id}}
     response = self.mypost('servers/%d/action' % vm.id, vm.userid,
                            json.dumps(request), 'json')
     self.assertSuccess(response)
     mrapi().ModifyInstance.assert_called_once()
Beispiel #15
0
 def test_get_port(self):
     nic = dbmf.NetworkInterfaceFactory()
     url = join_urls(PORTS_URL, str(nic.id))
     response = self.get(url, user=nic.userid)
     self.assertEqual(response.status_code, 200)
Beispiel #16
0
 def test_delete_network_in_use(self):
     test_net = dbmf.NetworkFactory()
     dbmf.NetworkInterfaceFactory(network=test_net)
     url = join_urls(NETWORKS_URL, str(test_net.id))
     response = self.delete(url, user=test_net.userid)
     self.assertEqual(response.status_code, 409)