Пример #1
0
    def test_controller_with_drive6(self):
        # Update ahci controller with six drives
        self.conf["compute"]["storage_backend"] = [{
            "type": "ahci",
            "use_msi": "true",
            "max_cmds": 1024,
            "max_sge": 128,
            "max_drive_per_controller": 6,
            "drives": drive6
        }]
        with open('/tmp/test.yml', 'w') as outfile:
            yaml.dump(self.conf, outfile, default_flow_style=False)
        os.system("infrasim config add test {}".format(tmp_conf_file))
        node = model.CNode(self.conf)
        node.init()
        node.precheck()
        node.start()

        controller_type = run_command("infrasim node info {} | grep -c ahci".
                                      format(self.conf["name"]))
        self.assertEqual(int(controller_type[1]), 1)

        qemu_pid = get_qemu_pid(node)
        qemu_cmdline = open("/proc/{}/cmdline".format(qemu_pid)).read().replace("\x00", " ")
        qemu_cmdline = helper.get_full_qemu_cmd(qemu_cmdline)

        assert "qemu-system-x86_64" in qemu_cmdline
        assert "/tmp/sda.img" in qemu_cmdline
        assert "/tmp/sdb.img" in qemu_cmdline
        assert "/tmp/sdc.img" in qemu_cmdline
        assert "/tmp/sdd.img" in qemu_cmdline
        assert "/tmp/sde.img" in qemu_cmdline
        assert "/tmp/sdf.img" in qemu_cmdline
        assert "format=qcow2" in qemu_cmdline
    def test_set_disk_drive(self):
        self.conf["compute"]["storage_backend"] = [{
            "type": "ahci",
            "max_drive_per_controller": 6,
            "drives": [
                {"size": 8, "file": "/tmp/sda.img"},
                {"size": 8, "file": "/tmp/sdb.img"}
            ]
        }]
        # with open(TMP_CONF_FILE, "w") as yaml_file:
        #    yaml.dump(self.conf, yaml_file, default_flow_style=False)

        node = model.CNode(self.conf)
        node.init()
        node.precheck()
        node.start()

        qemu_pid = get_qemu_pid(node)
        qemu_cmdline = open("/proc/{}/cmdline".format(qemu_pid)).read().replace("\x00", " ")
        qemu_cmdline = helper.get_full_qemu_cmd(qemu_cmdline)

        assert "qemu-system-x86_64" in qemu_cmdline
        assert "/tmp/sda.img" in qemu_cmdline
        assert "/tmp/sdb.img" in qemu_cmdline
        assert "format=qcow2" in qemu_cmdline
Пример #3
0
    def test_set_disk_drive(self):
        self.conf["compute"]["storage_backend"] = [{
            "type":
            "ahci",
            "max_drive_per_controller":
            6,
            "drives": [{
                "size": 8,
                "file": "/tmp/sda.img"
            }, {
                "size": 8,
                "file": "/tmp/sdb.img"
            }]
        }]
        # with open(TMP_CONF_FILE, "w") as yaml_file:
        #    yaml.dump(self.conf, yaml_file, default_flow_style=False)

        node = model.CNode(self.conf)
        node.init()
        node.precheck()
        node.start()

        qemu_pid = get_qemu_pid(node)
        qemu_cmdline = open(
            "/proc/{}/cmdline".format(qemu_pid)).read().replace("\x00", " ")
        qemu_cmdline = helper.get_full_qemu_cmd(qemu_cmdline)

        assert "qemu-system-x86_64" in qemu_cmdline
        assert "/tmp/sda.img" in qemu_cmdline
        assert "/tmp/sdb.img" in qemu_cmdline
        assert "format=qcow2" in qemu_cmdline
Пример #4
0
    def test_auto_add_nvme_serial(self):
        self.conf["compute"]["storage_backend"] = [{
            "type": "nvme",
            "cmb_size": 256,
            "size": 8
        }]

        node = model.CNode(self.conf)
        node.init()
        node.precheck()
        node.start()

        # Check process option has nvme serial
        str_result = run_command(PS_QEMU, True, subprocess.PIPE,
                                 subprocess.PIPE)[1]
        str_result = helper.get_full_qemu_cmd(str_result)
        p = re.compile(r"-device nvme.*serial=(\w+)")
        m = p.search(str_result)
        assert m is not None

        # Check config in workspace has nvme serial
        node_info = workspace.Workspace.get_node_info_in_workspace(
            self.conf["name"])
        serial = node_info["compute"]["storage_backend"][0]["serial"]
        assert m.group(1) == serial
Пример #5
0
    def test_controller_with_drive6(self):
        # Update lsi controller with six drives
        self.conf["compute"]["storage_backend"] = [{
            "type": "lsi",
            "use_msi": "true",
            "max_cmds": 1024,
            "max_sge": 128,
            "max_drive_per_controller": 6,
            "drives": drive6
        }]

        self.conf['compute']['storage_backend'].insert(
            0, {
                "type":
                "ahci",
                "max_drive_per_controller":
                6,
                "drives": [{
                    'file': fixtures.image,
                    'bootindex': 1,
                    'use_msi': 'true',
                    'size': 8
                }]
            })

        with open('/tmp/test.yml', 'w') as outfile:
            yaml.dump(self.conf, outfile, default_flow_style=False)
        os.system("infrasim config add test {}".format(tmp_conf_file))
        node = model.CNode(self.conf)
        node.init()
        node.precheck()
        node.start()
        helper.port_forward(node)

        controller_type = run_command(
            "infrasim node info {} | grep -c lsi".format(self.conf["name"]))
        self.assertEqual(int(controller_type[1]), 1)

        qemu_pid = get_qemu_pid(node)
        qemu_cmdline = open(
            "/proc/{}/cmdline".format(qemu_pid)).read().replace("\x00", " ")
        qemu_cmdline = helper.get_full_qemu_cmd(qemu_cmdline)

        assert "qemu-system-x86_64" in qemu_cmdline
        assert "/tmp/sda.img" in qemu_cmdline
        assert "/tmp/sdb.img" in qemu_cmdline
        assert "/tmp/sdc.img" in qemu_cmdline
        assert "/tmp/sdd.img" in qemu_cmdline
        assert "/tmp/sde.img" in qemu_cmdline
        assert "/tmp/sdf.img" in qemu_cmdline
        assert "format=qcow2" in qemu_cmdline

        storage_list = get_storage_list()
        lsi_info = None
        for c_map in storage_list:
            if c_map.get('name') == 'sym53c8xx':
                lsi_info = c_map
                break
        assert lsi_info
        assert len(lsi_info.get('disks')) == 6
Пример #6
0
    def test_controller_with_drive6(self):
        # Update ahci controller with six drives
        self.conf["compute"]["storage_backend"] = [{
            "type": "ahci",
            "use_msi": "true",
            "max_cmds": 1024,
            "max_sge": 128,
            "max_drive_per_controller": 6,
            "drives": drive6
        }]
        with open('/tmp/test.yml', 'w') as outfile:
            yaml.dump(self.conf, outfile, default_flow_style=False)
        os.system("infrasim config add test {}".format(tmp_conf_file))
        node = model.CNode(self.conf)
        node.init()
        node.precheck()
        node.start()

        controller_type = run_command(
            "infrasim node info {} | grep -c ahci".format(self.conf["name"]))
        self.assertEqual(int(controller_type[1]), 1)

        qemu_pid = get_qemu_pid(node)
        qemu_cmdline = open(
            "/proc/{}/cmdline".format(qemu_pid)).read().replace("\x00", " ")
        qemu_cmdline = helper.get_full_qemu_cmd(qemu_cmdline)

        assert "qemu-system-x86_64" in qemu_cmdline
        assert "/tmp/sda.img" in qemu_cmdline
        assert "/tmp/sdb.img" in qemu_cmdline
        assert "/tmp/sdc.img" in qemu_cmdline
        assert "/tmp/sdd.img" in qemu_cmdline
        assert "/tmp/sde.img" in qemu_cmdline
        assert "/tmp/sdf.img" in qemu_cmdline
        assert "format=qcow2" in qemu_cmdline
Пример #7
0
    def test_controller_with_drive6(self):
        # Update lsi controller with six drives
        self.conf["compute"]["storage_backend"] = [{
            "type": "lsi",
            "use_msi": "true",
            "max_cmds": 1024,
            "max_sge": 128,
            "max_drive_per_controller": 6,
            "drives": drive6
        }]

        self.conf['compute']['storage_backend'].insert(0,
                                                       {
                                                           "type": "ahci",
                                                           "max_drive_per_controller": 6,
                                                           "drives": [
                                                               {
                                                                   'file': fixtures.image,
                                                                   'bootindex': 1,
                                                                   'use_msi': 'true',
                                                                   'size': 8
                                                               }
                                                           ]
                                                       })

        with open('/tmp/test.yml', 'w') as outfile:
            yaml.dump(self.conf, outfile, default_flow_style=False)
        os.system("infrasim config add test {}".format(tmp_conf_file))
        node = model.CNode(self.conf)
        node.init()
        node.precheck()
        node.start()
        helper.port_forward(node)

        controller_type = run_command("infrasim node info {} | grep -c lsi".
                                      format(self.conf["name"]))
        self.assertEqual(int(controller_type[1]), 1)

        qemu_pid = get_qemu_pid(node)
        qemu_cmdline = open("/proc/{}/cmdline".format(qemu_pid)).read().replace("\x00", " ")
        qemu_cmdline = helper.get_full_qemu_cmd(qemu_cmdline)

        assert "qemu-system-x86_64" in qemu_cmdline
        assert "/tmp/sda.img" in qemu_cmdline
        assert "/tmp/sdb.img" in qemu_cmdline
        assert "/tmp/sdc.img" in qemu_cmdline
        assert "/tmp/sdd.img" in qemu_cmdline
        assert "/tmp/sde.img" in qemu_cmdline
        assert "/tmp/sdf.img" in qemu_cmdline
        assert "format=qcow2" in qemu_cmdline

        storage_list = get_storage_list()
        lsi_info = None
        for c_map in storage_list:
            if c_map.get('name') == 'sym53c8xx':
                lsi_info = c_map
                break
        assert lsi_info
        assert len(lsi_info.get('disks')) == 6
Пример #8
0
    def test_qemu_mac_persist_across_power_cycle(self):
        """
        Verify all network mac address persists across power cycle by ipmi command
        """
        # Get qemu mac addresses
        qemu_rsp = run_command(cmd_ps_qemu)[1]
        qemu_rsp = helper.get_full_qemu_cmd(qemu_rsp)
        macs_former = r.findall(qemu_rsp)

        run_command(cmd_power_cycle)
        # sleep 2.5s to wait qemu up.
        time.sleep(2.5)
        # Get qemu mac addresses
        qemu_rsp = run_command(cmd_ps_qemu)[1]
        qemu_rsp = helper.get_full_qemu_cmd(qemu_rsp)
        macs_latter = r.findall(qemu_rsp)
        # Verify mac address list remains the same
        assert sorted(macs_former) == sorted(macs_latter)
Пример #9
0
    def test_qemu_mac_persist_across_power_reset(self):
        """
        Verify all network mac address persists across power reset by ipmi command
        """
        # Get qemu mac addresses
        qemu_rsp = run_command(cmd_ps_qemu)[1]
        qemu_rsp = helper.get_full_qemu_cmd(qemu_rsp)
        macs_former = r.findall(qemu_rsp)

        run_command(cmd_power_reset)

        # Get qemu mac addresses
        qemu_rsp = run_command(cmd_ps_qemu)[1]
        qemu_rsp = helper.get_full_qemu_cmd(qemu_rsp)
        macs_latter = r.findall(qemu_rsp)

        # Verify mac address list remains the same
        assert sorted(macs_former) == sorted(macs_latter)
    def test_peer_node_off_on(self):
        os.system(cmd_prefix1[4])
        PS_QEMU = "ps ax | grep qemu"
        qemu_result = run_command(PS_QEMU, True, subprocess.PIPE, subprocess.PIPE)[1]
        qemu_result = helper.get_full_qemu_cmd(qemu_result)

        self.assertNotIn("test1", qemu_result, "peer_bmc can not power off")
        """
        test peer bmc on
        """
        os.system(cmd_prefix1[5])
        node1_ssh = self.client_ssh('192.168.188.92')
        status, result = node1_ssh.exec_command('ls')
        assert result
    def test_peer_node_off_on(self):
        os.system(cmd_prefix1[4])
        PS_QEMU = "ps ax | grep qemu"
        qemu_result = run_command(PS_QEMU, True, subprocess.PIPE,
                                  subprocess.PIPE)[1]
        qemu_result = helper.get_full_qemu_cmd(qemu_result)

        self.assertNotIn("test1", qemu_result, "peer_bmc can not power off")
        """
        test peer bmc on
        """
        os.system(cmd_prefix1[5])
        node1_ssh = self.client_ssh('192.168.188.92')
        status, result = node1_ssh.exec_command('ls')
        assert result
    def test_set_memory_capacity(self):
        self.conf["compute"]["memory"]["size"] = 1536
        with open(TMP_CONF_FILE, "w") as yaml_file:
            yaml.dump(self.conf, yaml_file, default_flow_style=False)

        node = model.CNode(self.conf)
        node.init()
        node.precheck()
        node.start()

        str_result = run_command(PS_QEMU, True,
                                 subprocess.PIPE, subprocess.PIPE)[1]
        str_result = helper.get_full_qemu_cmd(str_result)

        assert "qemu-system-x86_64" in str_result
        assert "-m 1536" in str_result
    def test_set_bmc_connection_port(self):
        self.conf["bmc_connection_port"] = 9102

        node = model.CNode(self.conf)
        node.init()
        node.precheck()
        node.start()

        with open(self.bmc_conf, "r") as fp:
            bmc_conf = fp.read()
        assert 'serial kcs 0.0.0.0 9102 codec VM ipmb 0x20' in bmc_conf

        str_result = run_command(PS_QEMU, True,
                                 subprocess.PIPE, subprocess.PIPE)[1]
        str_result = helper.get_full_qemu_cmd(str_result)
        assert "port=9102" in str_result
Пример #14
0
    def test_set_cpu_family(self):
        self.conf["compute"]["cpu"]["type"] = "IvyBridge"
        # with open(TMP_CONF_FILE, "w") as yaml_file:
        #    yaml.dump(self.conf, yaml_file, default_flow_style=False)

        node = model.CNode(self.conf)
        node.init()
        node.precheck()
        node.start()

        str_result = run_command(PS_QEMU, True, subprocess.PIPE,
                                 subprocess.PIPE)[1]
        str_result = helper.get_full_qemu_cmd(str_result)

        assert "qemu-system-x86_64" in str_result
        assert "-cpu IvyBridge" in str_result
Пример #15
0
    def test_set_memory_capacity(self):
        self.conf["compute"]["memory"]["size"] = 1536
        with open(TMP_CONF_FILE, "w") as yaml_file:
            yaml.dump(self.conf, yaml_file, default_flow_style=False)

        node = model.CNode(self.conf)
        node.init()
        node.precheck()
        node.start()

        str_result = run_command(PS_QEMU, True, subprocess.PIPE,
                                 subprocess.PIPE)[1]
        str_result = helper.get_full_qemu_cmd(str_result)

        assert "qemu-system-x86_64" in str_result
        assert "-m 1536" in str_result
Пример #16
0
    def test_set_bmc_connection_port(self):
        self.conf["bmc_connection_port"] = 9102

        node = model.CNode(self.conf)
        node.init()
        node.precheck()
        node.start()

        with open(self.bmc_conf, "r") as fp:
            bmc_conf = fp.read()
        assert 'serial kcs 0.0.0.0 9102 codec VM ipmb 0x20' in bmc_conf

        str_result = run_command(PS_QEMU, True, subprocess.PIPE,
                                 subprocess.PIPE)[1]
        str_result = helper.get_full_qemu_cmd(str_result)
        assert "port=9102" in str_result
    def test_set_vcpu(self):
        self.conf["compute"]["cpu"]["quantities"] = 8
        # with open(TMP_CONF_FILE, "w") as yaml_file:
        #    yaml.dump(self.conf, yaml_file, default_flow_style=False)

        node = model.CNode(self.conf)
        node.init()
        node.precheck()
        node.start()

        str_result = run_command(PS_QEMU, True,
                                 subprocess.PIPE, subprocess.PIPE)[1]
        str_result = helper.get_full_qemu_cmd(str_result)

        assert "qemu-system-x86_64" in str_result
        assert "-smp 8" in str_result
Пример #18
0
    def test_set_node_type(self):
        self.conf["type"] = "dell_c6320"

        node = model.CNode(self.conf)
        node.init()
        node.precheck()
        node.start()

        str_result = run_command(PS_QEMU, True, subprocess.PIPE,
                                 subprocess.PIPE)[1]
        str_result = helper.get_full_qemu_cmd(str_result)
        assert "qemu-system-x86_64" in str_result
        assert "-smbios file={}/test/data/dell_c6320_smbios.bin".\
            format(config.infrasim_home) in str_result

        str_result = run_command(PS_IPMI, True, subprocess.PIPE,
                                 subprocess.PIPE)[1]
        assert "-f {}/test/data/dell_c6320.emu".\
            format(config.infrasim_home) in str_result
    def test_set_node_type(self):
        self.conf["type"] = "dell_c6320"

        node = model.CNode(self.conf)
        node.init()
        node.precheck()
        node.start()

        str_result = run_command(PS_QEMU, True,
                                 subprocess.PIPE, subprocess.PIPE)[1]
        str_result = helper.get_full_qemu_cmd(str_result)
        assert "qemu-system-x86_64" in str_result
        assert "-smbios file={}/test/data/dell_c6320_smbios.bin".\
            format(config.infrasim_home) in str_result

        str_result = run_command(PS_IPMI, True,
                                 subprocess.PIPE, subprocess.PIPE)[1]
        assert "-f {}/test/data/dell_c6320.emu".\
            format(config.infrasim_home) in str_result
Пример #20
0
    def test_set_serial_socket(self):
        self.conf["sol_enable"] = True
        self.conf["serial_socket"] = "/tmp/test_infrasim_set_serial_socket"

        node = model.CNode(self.conf)
        node.init()
        node.precheck()
        node.start()

        str_result = run_command(PS_QEMU, True, subprocess.PIPE,
                                 subprocess.PIPE)[1]
        str_result = helper.get_full_qemu_cmd(str_result)
        assert "-chardev socket,path=/tmp/test_infrasim_set_serial_socket," \
               "id=serial0,nowait,reconnect=10" in str_result
        assert "-device isa-serial,chardev=serial0" in str_result

        str_result = run_command(PS_SOCAT, True, subprocess.PIPE,
                                 subprocess.PIPE)[1]
        assert "unix-listen:/tmp/test_infrasim_set_serial_socket," \
               "fork" in str_result
    def test_set_serial_socket(self):
        self.conf["sol_enable"] = True
        self.conf["serial_socket"] = "/tmp/test_infrasim_set_serial_socket"

        node = model.CNode(self.conf)
        node.init()
        node.precheck()
        node.start()

        str_result = run_command(PS_QEMU, True,
                                 subprocess.PIPE, subprocess.PIPE)[1]
        str_result = helper.get_full_qemu_cmd(str_result)
        assert "-chardev socket,path=/tmp/test_infrasim_set_serial_socket," \
               "id=serial0,nowait,reconnect=10" in str_result
        assert "-device isa-serial,chardev=serial0" in str_result

        str_result = run_command(PS_SOCAT, True,
                                 subprocess.PIPE, subprocess.PIPE)[1]
        assert "unix-listen:/tmp/test_infrasim_set_serial_socket," \
               "fork" in str_result
Пример #22
0
    def test_update_config_then_start_node(self):
        """
        CLI test: node will apply updated config if there's no runtime workspace
        """
        node_info = FakeConfig().get_node_info()
        node_info["type"] = "dell_r730xd"
        with open(self.test_config_path, "w") as fp:
            yaml.dump(node_info, fp, default_flow_style=False)

        output_update = run_command("infrasim config update {} {}".format(
            self.test_name, self.test_config_path))
        self.assertEqual(output_update[0], 0)
        output_start = run_command("infrasim node start {}".format(
            self.test_name))
        self.assertEqual(output_start[0], 0)
        output_ps_qemu = run_command("ps ax | grep qemu")
        self.assertEqual(output_ps_qemu[0], 0)

        assert "{}'s configuration mapping is updated".format(
            self.test_name) in output_update[1]
        assert "dell_r730xd" in helper.get_full_qemu_cmd(output_ps_qemu[1])
Пример #23
0
    def test_start_node(self):
        """
        Verify infrasim instance start with a netdev
        """
        self.conf["compute"]["networks"].append({
            "network_mode": "bridge",
            "network_name": FAKE_BRIDGE,
            "device": "vmxnet3",
            "mac": "00:11:22:33:44:55"
        })

        node = model.CNode(self.conf)
        node.init()
        node.precheck()
        node.start()

        ret, rsp = run_command(PS_QEMU)
        rsp = helper.get_full_qemu_cmd(rsp)
        assert "qemu-system-x86_64" in rsp
        assert "-netdev bridge,id=netdev1,br={}," \
               "helper=".format(FAKE_BRIDGE) in rsp
        assert "-device vmxnet3,netdev=netdev1," \
               "mac=00:11:22:33:44:55" in rsp
    def test_auto_add_nvme_serial(self):
        self.conf["compute"]["storage_backend"] = [{
            "type": "nvme",
            "cmb_size": 256,
            "size": 8
        }]

        node = model.CNode(self.conf)
        node.init()
        node.precheck()
        node.start()

        # Check process option has nvme serial
        str_result = run_command(PS_QEMU, True,
                                 subprocess.PIPE, subprocess.PIPE)[1]
        str_result = helper.get_full_qemu_cmd(str_result)
        p = re.compile(r"-device nvme.*serial=(\w+)")
        m = p.search(str_result)
        assert m is not None

        # Check config in workspace has nvme serial
        node_info = workspace.Workspace.get_node_info_in_workspace(self.conf["name"])
        serial = node_info["compute"]["storage_backend"][0]["serial"]
        assert m.group(1) == serial
Пример #25
0
    def test_controller_with_drive7_drive2_drive3(self):
        # Update ahci controller with seven drives
        self.conf["compute"]["storage_backend"] = [{
            "type": "ahci",
            "use_msi": "true",
            "max_cmds": 1024,
            "max_sge": 128,
            "max_drive_per_controller": 6,
            "drives": self.drives7
        }]

        controllers = []
        controllers.append({
            'type': 'ahci',
            'use_msi': 'true',
            'max_cmds': 1024,
            'max_sge': 128,
            'drives': [],
            'max_drive_per_controller': 6
        })
        controllers.append({
            'type': 'ahci',
            'use_msi': 'true',
            'max_cmds': 1024,
            'max_sge': 128,
            'drives': [],
            'max_drive_per_controller': 6
        })
        self.conf['compute']['storage_backend'].extend(controllers)

        drives2 = []
        drives2.append({'size': 8, 'file': "/tmp/sdh.img"})
        drives2.append({'size': 16, 'file': "/tmp/sdi.img"})

        self.conf['compute']['storage_backend'][1]['drives'].extend(drives2)

        drives3 = []
        drives3.append({'size': 8, 'file': "/tmp/sdj.img"})
        drives3.append({'size': 16, 'file': "/tmp/sdk.img"})
        drives3.append({'size': 8, 'file': "/tmp/sdl.img"})
        self.conf['compute']['storage_backend'][2]['drives'].extend(drives3)
        with open('/tmp/test.yml', 'w') as outfile:
            yaml.dump(self.conf, outfile, default_flow_style=False)
        node = model.CNode(self.conf)
        node.init()
        node.precheck()
        node.start()

        controller_type_ahci = run_command(
            "infrasim node info {} | grep -c ahci".format(self.conf["name"]))
        self.assertEqual(int(controller_type_ahci[1]), 4)

        qemu_pid = get_qemu_pid(node)
        qemu_cmdline = open(
            "/proc/{}/cmdline".format(qemu_pid)).read().replace("\x00", " ")
        qemu_cmdline = helper.get_full_qemu_cmd(qemu_cmdline)

        assert "qemu-system-x86_64" in qemu_cmdline
        assert "/tmp/sda.img" in qemu_cmdline
        assert "/tmp/sdb.img" in qemu_cmdline
        assert "/tmp/sdc.img" in qemu_cmdline
        assert "/tmp/sdd.img" in qemu_cmdline
        assert "/tmp/sde.img" in qemu_cmdline
        assert "/tmp/sdf.img" in qemu_cmdline
        assert "/tmp/sdg.img" in qemu_cmdline
        assert "/tmp/sdh.img" in qemu_cmdline
        assert "/tmp/sdi.img" in qemu_cmdline
        assert "/tmp/sdj.img" in qemu_cmdline
        assert "/tmp/sdk.img" in qemu_cmdline
        assert "/tmp/sdl.img" in qemu_cmdline
        assert "format=qcow2" in qemu_cmdline
        assert "-device ahci,id=sata0" in qemu_cmdline
        assert "-device ahci,id=sata1" in qemu_cmdline
        assert "-device ahci,id=sata2" in qemu_cmdline
        assert "-device ahci,id=sata3" in qemu_cmdline
        assert "drive=sata0-0-5-0" in qemu_cmdline
        assert "drive=sata1-0-0-0" in qemu_cmdline
        assert "drive=sata2-0-1-0" in qemu_cmdline
        assert "drive=sata3-0-2-0" in qemu_cmdline
Пример #26
0
    def test_four_controllers_each_with_six_drives(self):
        image_path = "{}/{}".format(config.infrasim_home, self.conf["name"])
        # Add several storage controllers/drives in node config file.
        drives = []
        drives.append({'size': 16, 'file': "{}/sdb.img".format(image_path)})
        drives.append({'size': 8, 'file': "{}/sdc.img".format(image_path)})
        drives.append({'size': 16, 'file': "{}/sdd.img".format(image_path)})
        drives.append({'size': 8, 'file': "{}/sde.img".format(image_path)})
        drives.append({'size': 16, 'file': "{}/sdf.img".format(image_path)})
        self.conf['compute']['storage_backend'][0]['drives'].extend(drives)
        self.conf['compute']['storage_backend'][0]['drives'][0][
            'file'] = fixtures.image

        controllers = []
        controllers.append({
            'type': 'megasas',
            'use_msi': 'true',
            'max_cmds': 1024,
            'max_sge': 128,
            'drives': [],
            'max_drive_per_controller': 6
        })
        controllers.append({
            'type': 'lsi',
            'use_msi': 'true',
            'max_cmds': 1024,
            'max_sge': 128,
            'drives': [],
            'max_drive_per_controller': 6
        })
        controllers.append({
            'type': 'ahci',
            'use_msi': 'true',
            'max_cmds': 1024,
            'max_sge': 128,
            'drives': [],
            'max_drive_per_controller': 6
        })
        self.conf['compute']['storage_backend'].extend(controllers)

        drives1 = []
        drives1.append({'size': 8, 'file': "{}/sdg.img".format(image_path)})
        drives1.append({'size': 16, 'file': "{}/sdh.img".format(image_path)})
        drives1.append({'size': 8, 'file': "{}/sdi.img".format(image_path)})
        drives1.append({'size': 16, 'file': "{}/sdj.img".format(image_path)})
        drives1.append({'size': 8, 'file': "{}/sdk.img".format(image_path)})
        drives1.append({'size': 16, 'file': "{}/sdl.img".format(image_path)})
        self.conf['compute']['storage_backend'][1]['drives'].extend(drives1)

        drives2 = []
        drives2.append({'size': 8, 'file': "{}/sdm.img".format(image_path)})
        drives2.append({'size': 16, 'file': "{}/sdn.img".format(image_path)})
        drives2.append({'size': 8, 'file': "{}/sdo.img".format(image_path)})
        drives2.append({'size': 16, 'file': "{}/sdp.img".format(image_path)})
        drives2.append({'size': 8, 'file': "{}/sdq.img".format(image_path)})
        drives2.append({'size': 16, 'file': "{}/sdr.img".format(image_path)})
        self.conf['compute']['storage_backend'][2]['drives'].extend(drives2)

        drives3 = []
        drives3.append({'size': 8, 'file': "{}/sds.img".format(image_path)})
        drives3.append({'size': 16, 'file': "{}/sdt.img".format(image_path)})
        drives3.append({'size': 8, 'file': "{}/sdu.img".format(image_path)})
        drives3.append({'size': 16, 'file': "{}/sdv.img".format(image_path)})
        drives3.append({'size': 8, 'file': "{}/sdw.img".format(image_path)})
        drives3.append({'size': 16, 'file': "{}/sdx.img".format(image_path)})
        self.conf['compute']['storage_backend'][3]['drives'].extend(drives3)

        with open('/tmp/test.yml', 'w') as outfile:
            yaml.dump(self.conf, outfile, default_flow_style=False)

        os.system("infrasim config add {} {}".format(self.conf["name"],
                                                     tmp_conf_file))
        node = model.CNode(self.conf)
        node.init()
        node.precheck()
        node.start()
        helper.port_forward(node)

        controller_type_ahci = run_command(
            "infrasim node info {} | grep -c ahci".format(self.conf["name"]))
        controller_type_megasas = run_command(
            "infrasim node info {} | grep -c megasas".format(
                self.conf["name"]))
        controller_type_lsi = run_command(
            "infrasim node info {} | grep -c lsi".format(self.conf["name"]))

        self.assertEqual(int(controller_type_ahci[1]), 2)
        self.assertEqual(int(controller_type_megasas[1]), 1)
        self.assertEqual(int(controller_type_lsi[1]), 1)

        qemu_pid = get_qemu_pid(node)
        qemu_cmdline = open(
            "/proc/{}/cmdline".format(qemu_pid)).read().replace("\x00", " ")
        qemu_cmdline = helper.get_full_qemu_cmd(qemu_cmdline)

        assert "qemu-system-x86_64" in qemu_cmdline
        assert "format=qcow2" in qemu_cmdline

        storage_list = get_storage_list()

        # Only has three types of controller
        assert len(storage_list) == 3
        for c_map in storage_list:
            if c_map.get('name') == 'ahci':
                assert len(c_map.get('buses')
                           ) == 2 * 6  # 2 controllers * 6 ports per controller
                assert len(c_map.get('disks')) == 12
            elif c_map.get('name') == 'megaraid_sas' or c_map.get(
                    'name') == 'sym53c8xx':
                assert len(c_map.get('buses')) == 1
                assert len(c_map.get('disks')) == 6
            else:
                assert False
Пример #27
0
    def test_controller_with_drive7_drive2_drive3(self):
        # Update ahci controller with seven drives
        self.conf["compute"]["storage_backend"] = [{
            "type": "ahci",
            "use_msi": "true",
            "max_cmds": 1024,
            "max_sge": 128,
            "max_drive_per_controller": 6,
            "drives": self.drives7
        }]

        controllers = []
        controllers.append({
            'type': 'ahci',
            'use_msi': 'true',
            'max_cmds': 1024,
            'max_sge': 128,
            'drives': [],
            'max_drive_per_controller': 6
        })
        controllers.append({
            'type': 'ahci',
            'use_msi': 'true',
            'max_cmds': 1024,
            'max_sge': 128,
            'drives': [],
            'max_drive_per_controller': 6
        })
        self.conf['compute']['storage_backend'].extend(controllers)

        drives2 = []
        drives2.append({'size': 8, 'file': "/tmp/sdh.img"})
        drives2.append({'size': 16, 'file': "/tmp/sdi.img"})

        self.conf['compute']['storage_backend'][1]['drives'].extend(drives2)

        drives3 = []
        drives3.append({'size': 8, 'file': "/tmp/sdj.img"})
        drives3.append({'size': 16, 'file': "/tmp/sdk.img"})
        drives3.append({'size': 8, 'file': "/tmp/sdl.img"})
        self.conf['compute']['storage_backend'][2]['drives'].extend(drives3)
        with open('/tmp/test.yml', 'w') as outfile:
            yaml.dump(self.conf, outfile, default_flow_style=False)
        node = model.CNode(self.conf)
        node.init()
        node.precheck()
        node.start()

        controller_type_ahci = run_command("infrasim node info {} | grep -c ahci".
                                           format(self.conf["name"]))
        self.assertEqual(int(controller_type_ahci[1]), 4)

        qemu_pid = get_qemu_pid(node)
        qemu_cmdline = open("/proc/{}/cmdline".format(qemu_pid)).read().replace("\x00", " ")
        qemu_cmdline = helper.get_full_qemu_cmd(qemu_cmdline)

        assert "qemu-system-x86_64" in qemu_cmdline
        assert "/tmp/sda.img" in qemu_cmdline
        assert "/tmp/sdb.img" in qemu_cmdline
        assert "/tmp/sdc.img" in qemu_cmdline
        assert "/tmp/sdd.img" in qemu_cmdline
        assert "/tmp/sde.img" in qemu_cmdline
        assert "/tmp/sdf.img" in qemu_cmdline
        assert "/tmp/sdg.img" in qemu_cmdline
        assert "/tmp/sdh.img" in qemu_cmdline
        assert "/tmp/sdi.img" in qemu_cmdline
        assert "/tmp/sdj.img" in qemu_cmdline
        assert "/tmp/sdk.img" in qemu_cmdline
        assert "/tmp/sdl.img" in qemu_cmdline
        assert "format=qcow2" in qemu_cmdline
        assert "-device ahci,id=sata0" in qemu_cmdline
        assert "-device ahci,id=sata1" in qemu_cmdline
        assert "-device ahci,id=sata2" in qemu_cmdline
        assert "-device ahci,id=sata3" in qemu_cmdline
        assert "drive=sata0-0-5-0" in qemu_cmdline
        assert "drive=sata1-0-0-0" in qemu_cmdline
        assert "drive=sata2-0-1-0" in qemu_cmdline
        assert "drive=sata3-0-2-0" in qemu_cmdline
Пример #28
0
    def test_four_controllers_each_with_six_drives(self):
        image_path = "{}/{}".format(config.infrasim_home, self.conf["name"])
        # Add several storage controllers/drives in node config file.
        drives = []
        drives.append({'size': 16, 'file': "{}/sdb.img".format(image_path)})
        drives.append({'size': 8, 'file': "{}/sdc.img".format(image_path)})
        drives.append({'size': 16, 'file': "{}/sdd.img".format(image_path)})
        drives.append({'size': 8, 'file': "{}/sde.img".format(image_path)})
        drives.append({'size': 16, 'file': "{}/sdf.img".format(image_path)})
        self.conf['compute']['storage_backend'][0]['drives'].extend(drives)
        self.conf['compute']['storage_backend'][0]['drives'][0]['file'] = fixtures.image

        controllers = []
        controllers.append({
            'type': 'megasas',
            'use_msi': 'true',
            'max_cmds': 1024,
            'max_sge': 128,
            'drives': [],
            'max_drive_per_controller': 6
        })
        controllers.append({
            'type': 'lsi',
            'use_msi': 'true',
            'max_cmds': 1024,
            'max_sge': 128,
            'drives': [],
            'max_drive_per_controller': 6
        })
        controllers.append({
            'type': 'ahci',
            'use_msi': 'true',
            'max_cmds': 1024,
            'max_sge': 128,
            'drives': [],
            'max_drive_per_controller': 6
        })
        self.conf['compute']['storage_backend'].extend(controllers)

        drives1 = []
        drives1.append({'size': 8, 'file': "{}/sdg.img".format(image_path)})
        drives1.append({'size': 16, 'file': "{}/sdh.img".format(image_path)})
        drives1.append({'size': 8, 'file': "{}/sdi.img".format(image_path)})
        drives1.append({'size': 16, 'file': "{}/sdj.img".format(image_path)})
        drives1.append({'size': 8, 'file': "{}/sdk.img".format(image_path)})
        drives1.append({'size': 16, 'file': "{}/sdl.img".format(image_path)})
        self.conf['compute']['storage_backend'][1]['drives'].extend(drives1)

        drives2 = []
        drives2.append({'size': 8, 'file': "{}/sdm.img".format(image_path)})
        drives2.append({'size': 16, 'file': "{}/sdn.img".format(image_path)})
        drives2.append({'size': 8, 'file': "{}/sdo.img".format(image_path)})
        drives2.append({'size': 16, 'file': "{}/sdp.img".format(image_path)})
        drives2.append({'size': 8, 'file': "{}/sdq.img".format(image_path)})
        drives2.append({'size': 16, 'file': "{}/sdr.img".format(image_path)})
        self.conf['compute']['storage_backend'][2]['drives'].extend(drives2)

        drives3 = []
        drives3.append({'size': 8, 'file': "{}/sds.img".format(image_path)})
        drives3.append({'size': 16, 'file': "{}/sdt.img".format(image_path)})
        drives3.append({'size': 8, 'file': "{}/sdu.img".format(image_path)})
        drives3.append({'size': 16, 'file': "{}/sdv.img".format(image_path)})
        drives3.append({'size': 8, 'file': "{}/sdw.img".format(image_path)})
        drives3.append({'size': 16, 'file': "{}/sdx.img".format(image_path)})
        self.conf['compute']['storage_backend'][3]['drives'].extend(drives3)

        with open('/tmp/test.yml', 'w') as outfile:
            yaml.dump(self.conf, outfile, default_flow_style=False)

        os.system("infrasim config add {} {}".format(self.conf["name"], tmp_conf_file))
        node = model.CNode(self.conf)
        node.init()
        node.precheck()
        node.start()
        helper.port_forward(node)

        controller_type_ahci = run_command("infrasim node info {} | grep -c ahci".
                                           format(self.conf["name"]))
        controller_type_megasas = run_command("infrasim node info {} | grep -c megasas".
                                              format(self.conf["name"]))
        controller_type_lsi = run_command("infrasim node info {} | grep -c lsi".
                                          format(self.conf["name"]))

        self.assertEqual(int(controller_type_ahci[1]), 2)
        self.assertEqual(int(controller_type_megasas[1]), 1)
        self.assertEqual(int(controller_type_lsi[1]), 1)

        qemu_pid = get_qemu_pid(node)
        qemu_cmdline = open("/proc/{}/cmdline".format(qemu_pid)).read().replace("\x00", " ")
        qemu_cmdline = helper.get_full_qemu_cmd(qemu_cmdline)

        assert "qemu-system-x86_64" in qemu_cmdline
        assert "format=qcow2" in qemu_cmdline

        storage_list = get_storage_list()

        # Only has three types of controller
        assert len(storage_list) == 3
        for c_map in storage_list:
            if c_map.get('name') == 'ahci':
                assert len(c_map.get('buses')) == 2 * 6  # 2 controllers * 6 ports per controller
                assert len(c_map.get('disks')) == 12
            elif c_map.get('name') == 'megaraid_sas' or c_map.get('name') == 'sym53c8xx':
                assert len(c_map.get('buses')) == 1
                assert len(c_map.get('disks')) == 6
            else:
                assert False