Exemplo n.º 1
0
    def test_main(self):
        with MockSCSI(MockDevice(spc)) as s:
            # cdb for SMC: ElementAddressAssignment
            m = s.modesense6(
                page_code=MODESENSE6.PAGE_CODE.ELEMENT_ADDRESS_ASSIGNMENT)
            cdb = m.cdb
            self.assertEqual(cdb[0], s.device.opcodes.MODE_SENSE_6.value)
            self.assertEqual(cdb[1], 0)
            self.assertEqual(cdb[2],
                             MODESENSE6.PAGE_CODE.ELEMENT_ADDRESS_ASSIGNMENT)
            self.assertEqual(cdb[3], 0)
            self.assertEqual(cdb[4], 96)
            self.assertEqual(cdb[5], 0)
            cdb = m.unmarshall_cdb(cdb)
            self.assertEqual(cdb['opcode'],
                             s.device.opcodes.MODE_SENSE_6.value)
            self.assertEqual(cdb['dbd'], 0)
            self.assertEqual(cdb['pc'], 0)
            self.assertEqual(cdb['page_code'],
                             MODESENSE6.PAGE_CODE.ELEMENT_ADDRESS_ASSIGNMENT)
            self.assertEqual(cdb['sub_page_code'], 0)
            self.assertEqual(cdb['alloc_len'], 96)

            d = ModeSense6.unmarshall_cdb(ModeSense6.marshall_cdb(cdb))
            self.assertEqual(d, cdb)

            m = s.modesense6(page_code=0,
                             sub_page_code=3,
                             dbd=1,
                             pc=MODESENSE6.PC.DEFAULT,
                             alloclen=90)
            cdb = m.cdb
            self.assertEqual(cdb[0], s.device.opcodes.MODE_SENSE_6.value)
            self.assertEqual(cdb[1], 0x08)
            self.assertEqual(cdb[2], MODESENSE6.PC.DEFAULT << 6)
            self.assertEqual(cdb[3], 3)
            self.assertEqual(cdb[4], 90)
            self.assertEqual(cdb[5], 0)
            cdb = m.unmarshall_cdb(cdb)
            self.assertEqual(cdb['opcode'],
                             s.device.opcodes.MODE_SENSE_6.value)
            self.assertEqual(cdb['dbd'], 1)
            self.assertEqual(cdb['pc'], MODESENSE6.PC.DEFAULT)
            self.assertEqual(cdb['page_code'], 0)
            self.assertEqual(cdb['sub_page_code'], 3)
            self.assertEqual(cdb['alloc_len'], 90)

            d = ModeSense6.unmarshall_cdb(ModeSense6.marshall_cdb(cdb))
            self.assertEqual(d, cdb)
Exemplo n.º 2
0
def main():
    dev = MockModeSense6()
    dev.opcodes = spc
    s = SCSI(dev)

    # cdb for SMC: ElementAddressAssignment
    m = s.modesense6(page_code=MODESENSE6.PAGE_CODE.ELEMENT_ADDRESS_ASSIGNMENT)
    cdb = m.cdb
    assert cdb[0] == s.device.opcodes.MODE_SENSE_6.value
    assert cdb[1] == 0
    assert cdb[2] == MODESENSE6.PAGE_CODE.ELEMENT_ADDRESS_ASSIGNMENT
    assert cdb[3] == 0
    assert cdb[4] == 96
    assert cdb[5] == 0
    cdb = m.unmarshall_cdb(cdb)
    assert cdb['opcode'] == s.device.opcodes.MODE_SENSE_6.value
    assert cdb['dbd'] == 0
    assert cdb['pc'] == 0
    assert cdb['page_code'] == MODESENSE6.PAGE_CODE.ELEMENT_ADDRESS_ASSIGNMENT
    assert cdb['sub_page_code'] == 0
    assert cdb['alloc_len'] == 96

    d = ModeSense6.unmarshall_cdb(ModeSense6.marshall_cdb(cdb))
    assert d == cdb

    m = s.modesense6(page_code=0,
                     sub_page_code=3,
                     dbd=1,
                     pc=MODESENSE6.PC.DEFAULT,
                     alloclen=90)
    cdb = m.cdb
    assert cdb[0] == s.device.opcodes.MODE_SENSE_6.value
    assert cdb[1] == 0x08
    assert cdb[2] == MODESENSE6.PC.DEFAULT << 6
    assert cdb[3] == 3
    assert cdb[4] == 90
    assert cdb[5] == 0
    cdb = m.unmarshall_cdb(cdb)
    assert cdb['opcode'] == s.device.opcodes.MODE_SENSE_6.value
    assert cdb['dbd'] == 1
    assert cdb['pc'] == MODESENSE6.PC.DEFAULT
    assert cdb['page_code'] == 0
    assert cdb['sub_page_code'] == 3
    assert cdb['alloc_len'] == 90

    d = ModeSense6.unmarshall_cdb(ModeSense6.marshall_cdb(cdb))
    assert d == cdb
Exemplo n.º 3
0
def main():
    dev = MockModeSense6()
    dev.opcodes = spc
    s = SCSI(dev)

    # cdb for SMC: ElementAddressAssignment
    m = s.modesense6(page_code=MODESENSE6.PAGE_CODE.ELEMENT_ADDRESS_ASSIGNMENT)
    cdb = m.cdb
    assert cdb[0] == s.device.opcodes.MODE_SENSE_6.value
    assert cdb[1] == 0
    assert cdb[2] == MODESENSE6.PAGE_CODE.ELEMENT_ADDRESS_ASSIGNMENT
    assert cdb[3] == 0
    assert cdb[4] == 96
    assert cdb[5] == 0
    cdb = m.unmarshall_cdb(cdb)
    assert cdb['opcode'] == s.device.opcodes.MODE_SENSE_6.value
    assert cdb['dbd'] == 0
    assert cdb['pc'] == 0
    assert cdb['page_code'] == MODESENSE6.PAGE_CODE.ELEMENT_ADDRESS_ASSIGNMENT
    assert cdb['sub_page_code'] == 0
    assert cdb['alloc_len'] == 96

    d = ModeSense6.unmarshall_cdb(ModeSense6.marshall_cdb(cdb))
    assert d == cdb

    m = s.modesense6(page_code=0, sub_page_code=3, dbd=1, pc=MODESENSE6.PC.DEFAULT, alloclen=90)
    cdb = m.cdb
    assert cdb[0] == s.device.opcodes.MODE_SENSE_6.value
    assert cdb[1] == 0x08
    assert cdb[2] == MODESENSE6.PC.DEFAULT << 6
    assert cdb[3] == 3
    assert cdb[4] == 90
    assert cdb[5] == 0
    cdb = m.unmarshall_cdb(cdb)
    assert cdb['opcode'] == s.device.opcodes.MODE_SENSE_6.value
    assert cdb['dbd'] == 1
    assert cdb['pc'] == MODESENSE6.PC.DEFAULT
    assert cdb['page_code'] == 0
    assert cdb['sub_page_code'] == 3
    assert cdb['alloc_len'] == 90

    d = ModeSense6.unmarshall_cdb(ModeSense6.marshall_cdb(cdb))
    assert d == cdb
Exemplo n.º 4
0
    def modesense6(self, page_code, **kwargs):
        """
        Returns a ModeSense6 Instance

        :param page_code:  The page requested
        :param sub_page_code = 0: Requested subpage
        :param dbd = 0: Disable Block Descriptors flag
        :param pc = 0: Page Control flag
        :param alloclen = 96
        :return: a ModeSense6 instance
        """
        return ModeSense6(self, page_code, **kwargs)
Exemplo n.º 5
0
    def modesense6(self, page_code, **kwargs):
        """
        Returns a ModeSense6 Instance

        :param page_code:  The page requested
        :param kwargs: a dict with key/value pairs
                       sub_page_code = 0, Requested subpage
                       dbd = 0, Disable Block Descriptors flag
                       pc = 0, Page Control flag
                       alloclen = 96
        :return: a ModeSense6 instance
        """
        opcode = self.device.opcodes.MODE_SENSE_6
        cmd = ModeSense6(opcode, page_code, **kwargs)
        self.execute(cmd)
        cmd.unmarshall()
        return cmd
def main():
    # SMC ElementAddressAssignment
    dev = MockModeSenseEAA()
    dev.opcodes = spc
    s = SCSI(dev)
    i = s.modesense6(page_code=MODESENSE6.PAGE_CODE.ELEMENT_ADDRESS_ASSIGNMENT).result
    assert i['medium_type'] == 97
    assert i['device_specific_parameter'] == 98

    assert len(i['mode_pages']) == 1

    assert i['mode_pages'][0]['ps'] == 1
    assert i['mode_pages'][0]['spf'] == 0
    assert i['mode_pages'][0]['page_code'] == MODESENSE6.PAGE_CODE.ELEMENT_ADDRESS_ASSIGNMENT
    assert i['mode_pages'][0]['first_medium_transport_element_address'] == 257
    assert i['mode_pages'][0]['num_medium_transport_elements'] == 258
    assert i['mode_pages'][0]['first_storage_element_address'] == 259
    assert i['mode_pages'][0]['num_storage_elements'] == 260
    assert i['mode_pages'][0]['first_import_element_address'] == 261
    assert i['mode_pages'][0]['num_import_elements'] == 262
    assert i['mode_pages'][0]['first_data_transfer_element_address'] == 263
    assert i['mode_pages'][0]['num_data_transfer_elements'] == 264

    d = ModeSense6.unmarshall_datain(ModeSense6.marshall_datain(i))
    assert d == i

    # SPC Control
    dev = MockModeSenseControl()
    dev.opcodes = spc
    s = SCSI(dev)
    i = s.modesense6(page_code=MODESENSE6.PAGE_CODE.CONTROL).result
    assert i['medium_type'] == 0
    assert i['device_specific_parameter'] == 0x90

    assert len(i['mode_pages']) == 1

    assert i['mode_pages'][0]['ps'] == 1
    assert i['mode_pages'][0]['spf'] == 0
    assert i['mode_pages'][0]['page_code'] == MODESENSE6.PAGE_CODE.CONTROL
    assert i['mode_pages'][0]['tst'] == 4
    assert i['mode_pages'][0]['tmf_only'] == 1
    assert i['mode_pages'][0]['dpicz'] == 1
    assert i['mode_pages'][0]['d_sense'] == 1
    assert i['mode_pages'][0]['gltsd'] == 1
    assert i['mode_pages'][0]['rlec'] == 1
    assert i['mode_pages'][0]['queue_algorithm_modifier'] == 9
    assert i['mode_pages'][0]['nuar'] == 1
    assert i['mode_pages'][0]['qerr'] == 3
    assert i['mode_pages'][0]['vs'] == 1
    assert i['mode_pages'][0]['rac'] == 1
    assert i['mode_pages'][0]['ua_intlck_ctrl'] == 3
    assert i['mode_pages'][0]['swp'] == 1
    assert i['mode_pages'][0]['ato'] == 1
    assert i['mode_pages'][0]['tas'] == 1
    assert i['mode_pages'][0]['atmpe'] == 1
    assert i['mode_pages'][0]['rwwp'] == 1
    assert i['mode_pages'][0]['autoload_mode'] == 7
    assert i['mode_pages'][0]['busy_timeout_period'] == 500
    assert i['mode_pages'][0]['extended_self_test_completion_time'] == 700

    d = ModeSense6.unmarshall_datain(ModeSense6.marshall_datain(i))
    assert d == i

    # SPC Control Ext 1
    dev = MockModeSenseControlExt1()
    dev.opcodes = spc
    s = SCSI(dev)
    i = s.modesense6(page_code=MODESENSE6.PAGE_CODE.CONTROL, sub_page_code=1).result
    assert i['medium_type'] == 0
    assert i['device_specific_parameter'] == 0x90

    assert len(i['mode_pages']) == 1

    assert i['mode_pages'][0]['ps'] == 1
    assert i['mode_pages'][0]['spf'] == 1
    assert i['mode_pages'][0]['page_code'] == MODESENSE6.PAGE_CODE.CONTROL
    assert i['mode_pages'][0]['sub_page_code'] == 1
    assert i['mode_pages'][0]['tcmos'] == 1
    assert i['mode_pages'][0]['scsip'] == 1
    assert i['mode_pages'][0]['ialuae'] == 1
    assert i['mode_pages'][0]['initial_command_priority'] == 15
    assert i['mode_pages'][0]['maximum_sense_data_length'] == 29

    d = ModeSense6.unmarshall_datain(ModeSense6.marshall_datain(i))
    assert d == i

    # SPC Disconnect
    dev = MockModeSenseDisconnect()
    dev.opcodes = spc
    s = SCSI(dev)
    i = s.modesense6(page_code=MODESENSE6.PAGE_CODE.DISCONNECT_RECONNECT).result
    assert i['medium_type'] == 0
    assert i['device_specific_parameter'] == 0x90

    assert len(i['mode_pages']) == 1

    assert i['mode_pages'][0]['ps'] == 1
    assert i['mode_pages'][0]['spf'] == 0
    assert i['mode_pages'][0]['page_code'] == MODESENSE6.PAGE_CODE.DISCONNECT_RECONNECT
    assert i['mode_pages'][0]['buffer_full_ratio'] == 122
    assert i['mode_pages'][0]['buffer_empty_ratio'] == 123
    assert i['mode_pages'][0]['bus_inactivity_limit'] == 2371
    assert i['mode_pages'][0]['disconnect_time_limit'] == 2372
    assert i['mode_pages'][0]['connect_time_limit'] == 2373
    assert i['mode_pages'][0]['maximum_burst_size'] == 2374
    assert i['mode_pages'][0]['emdp'] == 1
    assert i['mode_pages'][0]['fair_arbitration'] == 7
    assert i['mode_pages'][0]['dimm'] == 1
    assert i['mode_pages'][0]['dtdc'] == 7
    assert i['mode_pages'][0]['first_burst_size'] == 2375

    d = ModeSense6.unmarshall_datain(ModeSense6.marshall_datain(i))
    assert d == i
Exemplo n.º 7
0
    def test_main(self):
        # SMC ElementAddressAssignment
        with MockSCSI(MockModeSenseEAA(spc)) as s:
            i = s.modesense6(page_code=MODESENSE6.PAGE_CODE.
                             ELEMENT_ADDRESS_ASSIGNMENT).result
            self.assertEqual(i['medium_type'], 97)
            self.assertEqual(i['device_specific_parameter'], 98)

            self.assertEqual(len(i['mode_pages']), 1)

            self.assertEqual(i['mode_pages'][0]['ps'], 1)
            self.assertEqual(i['mode_pages'][0]['spf'], 0)
            self.assertEqual(i['mode_pages'][0]['page_code'],
                             MODESENSE6.PAGE_CODE.ELEMENT_ADDRESS_ASSIGNMENT)
            self.assertEqual(
                i['mode_pages'][0]['first_medium_transport_element_address'],
                257)
            self.assertEqual(
                i['mode_pages'][0]['num_medium_transport_elements'], 258)
            self.assertEqual(
                i['mode_pages'][0]['first_storage_element_address'], 259)
            self.assertEqual(i['mode_pages'][0]['num_storage_elements'], 260)
            self.assertEqual(
                i['mode_pages'][0]['first_import_element_address'], 261)
            self.assertEqual(i['mode_pages'][0]['num_import_elements'], 262)
            self.assertEqual(
                i['mode_pages'][0]['first_data_transfer_element_address'], 263)
            self.assertEqual(i['mode_pages'][0]['num_data_transfer_elements'],
                             264)

            d = ModeSense6.unmarshall_datain(ModeSense6.marshall_datain(i))
            self.assertEqual(d, i)

            # SPC Control
            s.device = MockModeSenseControl(spc)
            i = s.modesense6(page_code=MODESENSE6.PAGE_CODE.CONTROL).result
            self.assertEqual(i['medium_type'], 0)
            self.assertEqual(i['device_specific_parameter'], 0x90)

            self.assertEqual(len(i['mode_pages']), 1)

            self.assertEqual(i['mode_pages'][0]['ps'], 1)
            self.assertEqual(i['mode_pages'][0]['spf'], 0)
            self.assertEqual(i['mode_pages'][0]['page_code'],
                             MODESENSE6.PAGE_CODE.CONTROL)
            self.assertEqual(i['mode_pages'][0]['tst'], 4)
            self.assertEqual(i['mode_pages'][0]['tmf_only'], 1)
            self.assertEqual(i['mode_pages'][0]['dpicz'], 1)
            self.assertEqual(i['mode_pages'][0]['d_sense'], 1)
            self.assertEqual(i['mode_pages'][0]['gltsd'], 1)
            self.assertEqual(i['mode_pages'][0]['rlec'], 1)
            self.assertEqual(i['mode_pages'][0]['queue_algorithm_modifier'], 9)
            self.assertEqual(i['mode_pages'][0]['nuar'], 1)
            self.assertEqual(i['mode_pages'][0]['qerr'], 3)
            self.assertEqual(i['mode_pages'][0]['vs'], 1)
            self.assertEqual(i['mode_pages'][0]['rac'], 1)
            self.assertEqual(i['mode_pages'][0]['ua_intlck_ctrl'], 3)
            self.assertEqual(i['mode_pages'][0]['swp'], 1)
            self.assertEqual(i['mode_pages'][0]['ato'], 1)
            self.assertEqual(i['mode_pages'][0]['tas'], 1)
            self.assertEqual(i['mode_pages'][0]['atmpe'], 1)
            self.assertEqual(i['mode_pages'][0]['rwwp'], 1)
            self.assertEqual(i['mode_pages'][0]['autoload_mode'], 7)
            self.assertEqual(i['mode_pages'][0]['busy_timeout_period'], 500)
            self.assertEqual(
                i['mode_pages'][0]['extended_self_test_completion_time'], 700)

            d = ModeSense6.unmarshall_datain(ModeSense6.marshall_datain(i))
            self.assertEqual(d, i)

            # SPC Control Ext 1
            s.device = MockModeSenseControlExt1(spc)
            i = s.modesense6(page_code=MODESENSE6.PAGE_CODE.CONTROL,
                             sub_page_code=1).result
            self.assertEqual(i['medium_type'], 0)
            self.assertEqual(i['device_specific_parameter'], 0x90)

            self.assertEqual(len(i['mode_pages']), 1)

            self.assertEqual(i['mode_pages'][0]['ps'], 1)
            self.assertEqual(i['mode_pages'][0]['spf'], 1)
            self.assertEqual(i['mode_pages'][0]['page_code'],
                             MODESENSE6.PAGE_CODE.CONTROL)
            self.assertEqual(i['mode_pages'][0]['sub_page_code'], 1)
            self.assertEqual(i['mode_pages'][0]['tcmos'], 1)
            self.assertEqual(i['mode_pages'][0]['scsip'], 1)
            self.assertEqual(i['mode_pages'][0]['ialuae'], 1)
            self.assertEqual(i['mode_pages'][0]['initial_command_priority'],
                             15)
            self.assertEqual(i['mode_pages'][0]['maximum_sense_data_length'],
                             29)

            d = ModeSense6.unmarshall_datain(ModeSense6.marshall_datain(i))
            self.assertEqual(d, i)

            # SPC Disconnect
            s.device = MockModeSenseDisconnect(spc)
            i = s.modesense6(
                page_code=MODESENSE6.PAGE_CODE.DISCONNECT_RECONNECT).result
            self.assertEqual(i['medium_type'], 0)
            self.assertEqual(i['device_specific_parameter'], 0x90)

            self.assertEqual(len(i['mode_pages']), 1)

            self.assertEqual(i['mode_pages'][0]['ps'], 1)
            self.assertEqual(i['mode_pages'][0]['spf'], 0)
            self.assertEqual(i['mode_pages'][0]['page_code'],
                             MODESENSE6.PAGE_CODE.DISCONNECT_RECONNECT)
            self.assertEqual(i['mode_pages'][0]['buffer_full_ratio'], 122)
            self.assertEqual(i['mode_pages'][0]['buffer_empty_ratio'], 123)
            self.assertEqual(i['mode_pages'][0]['bus_inactivity_limit'], 2371)
            self.assertEqual(i['mode_pages'][0]['disconnect_time_limit'], 2372)
            self.assertEqual(i['mode_pages'][0]['connect_time_limit'], 2373)
            self.assertEqual(i['mode_pages'][0]['maximum_burst_size'], 2374)
            self.assertEqual(i['mode_pages'][0]['emdp'], 1)
            self.assertEqual(i['mode_pages'][0]['fair_arbitration'], 7)
            self.assertEqual(i['mode_pages'][0]['dimm'], 1)
            self.assertEqual(i['mode_pages'][0]['dtdc'], 7)
            self.assertEqual(i['mode_pages'][0]['first_burst_size'], 2375)

            d = ModeSense6.unmarshall_datain(ModeSense6.marshall_datain(i))
            self.assertEqual(d, i)
def main():
    # SMC ElementAddressAssignment
    dev = MockModeSenseEAA()
    dev.opcodes = spc
    s = SCSI(dev)
    i = s.modesense6(page_code=MODESENSE6.PAGE_CODE.ELEMENT_ADDRESS_ASSIGNMENT).result
    assert i["medium_type"] == 97
    assert i["device_specific_parameter"] == 98

    assert len(i["mode_pages"]) == 1

    assert i["mode_pages"][0]["ps"] == 1
    assert i["mode_pages"][0]["spf"] == 0
    assert i["mode_pages"][0]["page_code"] == MODESENSE6.PAGE_CODE.ELEMENT_ADDRESS_ASSIGNMENT
    assert i["mode_pages"][0]["first_medium_transport_element_address"] == 257
    assert i["mode_pages"][0]["num_medium_transport_elements"] == 258
    assert i["mode_pages"][0]["first_storage_element_address"] == 259
    assert i["mode_pages"][0]["num_storage_elements"] == 260
    assert i["mode_pages"][0]["first_import_element_address"] == 261
    assert i["mode_pages"][0]["num_import_elements"] == 262
    assert i["mode_pages"][0]["first_data_transfer_element_address"] == 263
    assert i["mode_pages"][0]["num_data_transfer_elements"] == 264

    d = ModeSense6.unmarshall_datain(ModeSense6.marshall_datain(i))
    assert d == i

    # SPC Control
    dev = MockModeSenseControl()
    dev.opcodes = spc
    s = SCSI(dev)
    i = s.modesense6(page_code=MODESENSE6.PAGE_CODE.CONTROL).result
    assert i["medium_type"] == 0
    assert i["device_specific_parameter"] == 0x90

    assert len(i["mode_pages"]) == 1

    assert i["mode_pages"][0]["ps"] == 1
    assert i["mode_pages"][0]["spf"] == 0
    assert i["mode_pages"][0]["page_code"] == MODESENSE6.PAGE_CODE.CONTROL
    assert i["mode_pages"][0]["tst"] == 4
    assert i["mode_pages"][0]["tmf_only"] == 1
    assert i["mode_pages"][0]["dpicz"] == 1
    assert i["mode_pages"][0]["d_sense"] == 1
    assert i["mode_pages"][0]["gltsd"] == 1
    assert i["mode_pages"][0]["rlec"] == 1
    assert i["mode_pages"][0]["queue_algorithm_modifier"] == 9
    assert i["mode_pages"][0]["nuar"] == 1
    assert i["mode_pages"][0]["qerr"] == 3
    assert i["mode_pages"][0]["vs"] == 1
    assert i["mode_pages"][0]["rac"] == 1
    assert i["mode_pages"][0]["ua_intlck_ctrl"] == 3
    assert i["mode_pages"][0]["swp"] == 1
    assert i["mode_pages"][0]["ato"] == 1
    assert i["mode_pages"][0]["tas"] == 1
    assert i["mode_pages"][0]["atmpe"] == 1
    assert i["mode_pages"][0]["rwwp"] == 1
    assert i["mode_pages"][0]["autoload_mode"] == 7
    assert i["mode_pages"][0]["busy_timeout_period"] == 500
    assert i["mode_pages"][0]["extended_self_test_completion_time"] == 700

    d = ModeSense6.unmarshall_datain(ModeSense6.marshall_datain(i))
    assert d == i

    # SPC Control Ext 1
    dev = MockModeSenseControlExt1()
    dev.opcodes = spc
    s = SCSI(dev)
    i = s.modesense6(page_code=MODESENSE6.PAGE_CODE.CONTROL, sub_page_code=1).result
    assert i["medium_type"] == 0
    assert i["device_specific_parameter"] == 0x90

    assert len(i["mode_pages"]) == 1

    assert i["mode_pages"][0]["ps"] == 1
    assert i["mode_pages"][0]["spf"] == 1
    assert i["mode_pages"][0]["page_code"] == MODESENSE6.PAGE_CODE.CONTROL
    assert i["mode_pages"][0]["sub_page_code"] == 1
    assert i["mode_pages"][0]["tcmos"] == 1
    assert i["mode_pages"][0]["scsip"] == 1
    assert i["mode_pages"][0]["ialuae"] == 1
    assert i["mode_pages"][0]["initial_command_priority"] == 15
    assert i["mode_pages"][0]["maximum_sense_data_length"] == 29

    d = ModeSense6.unmarshall_datain(ModeSense6.marshall_datain(i))
    assert d == i

    # SPC Disconnect
    dev = MockModeSenseDisconnect()
    dev.opcodes = spc
    s = SCSI(dev)
    i = s.modesense6(page_code=MODESENSE6.PAGE_CODE.DISCONNECT_RECONNECT).result
    assert i["medium_type"] == 0
    assert i["device_specific_parameter"] == 0x90

    assert len(i["mode_pages"]) == 1

    assert i["mode_pages"][0]["ps"] == 1
    assert i["mode_pages"][0]["spf"] == 0
    assert i["mode_pages"][0]["page_code"] == MODESENSE6.PAGE_CODE.DISCONNECT_RECONNECT
    assert i["mode_pages"][0]["buffer_full_ratio"] == 122
    assert i["mode_pages"][0]["buffer_empty_ratio"] == 123
    assert i["mode_pages"][0]["bus_inactivity_limit"] == 2371
    assert i["mode_pages"][0]["disconnect_time_limit"] == 2372
    assert i["mode_pages"][0]["connect_time_limit"] == 2373
    assert i["mode_pages"][0]["maximum_burst_size"] == 2374
    assert i["mode_pages"][0]["emdp"] == 1
    assert i["mode_pages"][0]["fair_arbitration"] == 7
    assert i["mode_pages"][0]["dimm"] == 1
    assert i["mode_pages"][0]["dtdc"] == 7
    assert i["mode_pages"][0]["first_burst_size"] == 2375

    d = ModeSense6.unmarshall_datain(ModeSense6.marshall_datain(i))
    assert d == i
def main():
    # SMC ElementAddressAssignment
    dev = MockModeSenseEAA()
    dev.opcodes = spc
    s = SCSI(dev)
    i = s.modesense6(
        page_code=MODESENSE6.PAGE_CODE.ELEMENT_ADDRESS_ASSIGNMENT).result
    assert i['medium_type'] == 97
    assert i['device_specific_parameter'] == 98

    assert len(i['mode_pages']) == 1

    assert i['mode_pages'][0]['ps'] == 1
    assert i['mode_pages'][0]['spf'] == 0
    assert i['mode_pages'][0][
        'page_code'] == MODESENSE6.PAGE_CODE.ELEMENT_ADDRESS_ASSIGNMENT
    assert i['mode_pages'][0]['first_medium_transport_element_address'] == 257
    assert i['mode_pages'][0]['num_medium_transport_elements'] == 258
    assert i['mode_pages'][0]['first_storage_element_address'] == 259
    assert i['mode_pages'][0]['num_storage_elements'] == 260
    assert i['mode_pages'][0]['first_import_element_address'] == 261
    assert i['mode_pages'][0]['num_import_elements'] == 262
    assert i['mode_pages'][0]['first_data_transfer_element_address'] == 263
    assert i['mode_pages'][0]['num_data_transfer_elements'] == 264

    d = ModeSense6.unmarshall_datain(ModeSense6.marshall_datain(i))
    assert d == i

    # SPC Control
    dev = MockModeSenseControl()
    dev.opcodes = spc
    s = SCSI(dev)
    i = s.modesense6(page_code=MODESENSE6.PAGE_CODE.CONTROL).result
    assert i['medium_type'] == 0
    assert i['device_specific_parameter'] == 0x90

    assert len(i['mode_pages']) == 1

    assert i['mode_pages'][0]['ps'] == 1
    assert i['mode_pages'][0]['spf'] == 0
    assert i['mode_pages'][0]['page_code'] == MODESENSE6.PAGE_CODE.CONTROL
    assert i['mode_pages'][0]['tst'] == 4
    assert i['mode_pages'][0]['tmf_only'] == 1
    assert i['mode_pages'][0]['dpicz'] == 1
    assert i['mode_pages'][0]['d_sense'] == 1
    assert i['mode_pages'][0]['gltsd'] == 1
    assert i['mode_pages'][0]['rlec'] == 1
    assert i['mode_pages'][0]['queue_algorithm_modifier'] == 9
    assert i['mode_pages'][0]['nuar'] == 1
    assert i['mode_pages'][0]['qerr'] == 3
    assert i['mode_pages'][0]['vs'] == 1
    assert i['mode_pages'][0]['rac'] == 1
    assert i['mode_pages'][0]['ua_intlck_ctrl'] == 3
    assert i['mode_pages'][0]['swp'] == 1
    assert i['mode_pages'][0]['ato'] == 1
    assert i['mode_pages'][0]['tas'] == 1
    assert i['mode_pages'][0]['atmpe'] == 1
    assert i['mode_pages'][0]['rwwp'] == 1
    assert i['mode_pages'][0]['autoload_mode'] == 7
    assert i['mode_pages'][0]['busy_timeout_period'] == 500
    assert i['mode_pages'][0]['extended_self_test_completion_time'] == 700

    d = ModeSense6.unmarshall_datain(ModeSense6.marshall_datain(i))
    assert d == i

    # SPC Control Ext 1
    dev = MockModeSenseControlExt1()
    dev.opcodes = spc
    s = SCSI(dev)
    i = s.modesense6(page_code=MODESENSE6.PAGE_CODE.CONTROL,
                     sub_page_code=1).result
    assert i['medium_type'] == 0
    assert i['device_specific_parameter'] == 0x90

    assert len(i['mode_pages']) == 1

    assert i['mode_pages'][0]['ps'] == 1
    assert i['mode_pages'][0]['spf'] == 1
    assert i['mode_pages'][0]['page_code'] == MODESENSE6.PAGE_CODE.CONTROL
    assert i['mode_pages'][0]['sub_page_code'] == 1
    assert i['mode_pages'][0]['tcmos'] == 1
    assert i['mode_pages'][0]['scsip'] == 1
    assert i['mode_pages'][0]['ialuae'] == 1
    assert i['mode_pages'][0]['initial_command_priority'] == 15
    assert i['mode_pages'][0]['maximum_sense_data_length'] == 29

    d = ModeSense6.unmarshall_datain(ModeSense6.marshall_datain(i))
    assert d == i

    # SPC Disconnect
    dev = MockModeSenseDisconnect()
    dev.opcodes = spc
    s = SCSI(dev)
    i = s.modesense6(
        page_code=MODESENSE6.PAGE_CODE.DISCONNECT_RECONNECT).result
    assert i['medium_type'] == 0
    assert i['device_specific_parameter'] == 0x90

    assert len(i['mode_pages']) == 1

    assert i['mode_pages'][0]['ps'] == 1
    assert i['mode_pages'][0]['spf'] == 0
    assert i['mode_pages'][0][
        'page_code'] == MODESENSE6.PAGE_CODE.DISCONNECT_RECONNECT
    assert i['mode_pages'][0]['buffer_full_ratio'] == 122
    assert i['mode_pages'][0]['buffer_empty_ratio'] == 123
    assert i['mode_pages'][0]['bus_inactivity_limit'] == 2371
    assert i['mode_pages'][0]['disconnect_time_limit'] == 2372
    assert i['mode_pages'][0]['connect_time_limit'] == 2373
    assert i['mode_pages'][0]['maximum_burst_size'] == 2374
    assert i['mode_pages'][0]['emdp'] == 1
    assert i['mode_pages'][0]['fair_arbitration'] == 7
    assert i['mode_pages'][0]['dimm'] == 1
    assert i['mode_pages'][0]['dtdc'] == 7
    assert i['mode_pages'][0]['first_burst_size'] == 2375

    d = ModeSense6.unmarshall_datain(ModeSense6.marshall_datain(i))
    assert d == i