Ejemplo n.º 1
0
def test_build_choice():
    data = in_snip(['t1', 1, 0, [0x0201, ['sig']], 1111, EndOfSmlMsg])
    builder = SmlMessageBuilder()
    obj = builder.build(data, {SmlCloseResponse: SmlCloseResponseBuilder()})
    assert obj.transaction_id == 't1'
    assert obj.group_no == 1
    assert obj.abort_on_error == 0
    assert isinstance(obj.message_body, SmlCloseResponse)
    assert obj.message_body.global_signature == 'sig'
    assert obj.crc16 == 1111

    class PatchedBuilder(SmlObjBuilder):
        BUILDS = SmlCloseResponse

        def build(self, obj: list, classes):
            ret = super().build(obj, classes)
            ret.global_signature += '_patched'
            return ret

    data = in_snip(['t1', 1, 0, [0x0201, ['sig']], 1111, EndOfSmlMsg])
    obj = builder.build(data, {SmlCloseResponse: PatchedBuilder()})
    assert obj.transaction_id == 't1'
    assert obj.group_no == 1
    assert obj.abort_on_error == 0
    assert isinstance(obj.message_body, SmlCloseResponse)
    assert obj.message_body.global_signature == 'sig_patched'
    assert obj.crc16 == 1111
Ejemplo n.º 2
0
def test_sml_time():
    assert build_time(None) is None
    assert build_time(in_snip([1, 253], pack_top=False)) == 253
    assert build_time(in_snip([2, 1609466461], pack_top=False)) == datetime(2021, 1, 1, 2, 1, 1)

    assert build_time(in_snip([3, [1609466461, 120,  0]], pack_top=False)) == datetime(2021, 1, 1, 4, 1, 1)
    assert build_time(in_snip([3, [1622509261, 120, 60]], pack_top=False)) == datetime(2021, 6, 1, 4, 1, 1)
    assert build_time(in_snip([3, [1622509261, 120, 30]], pack_top=False)) == datetime(2021, 6, 1, 3, 31, 1)
Ejemplo n.º 3
0
def test_build_entry():
    builder = SmlListEntryBuilder()
    obj = builder.build(
        in_snip(['0100010800ff', None, None, None, None, '76616c', None]),
        {SmlListEntry: builder})
    assert obj.obis == '0100010800ff'
    assert obj.value == 'val'
Ejemplo n.º 4
0
def test_build_entry_list():
    data = in_snip([
        None, 'server', None, None,
        [['0100010800ff', None, None, None, None, '76616c31', None],
         ['0100010801ff', None, None, None, None, '76616c32', None]], None,
        None
    ])

    builder = SmlGetListResponseBuilder()

    obj = builder.build(
        data,
        {SmlListEntry: SmlListEntryBuilder()})  # type: SmlGetListResponse
    assert obj.sever_id == 'server'
    assert obj.val_list[0].obis == '0100010800ff'
    assert obj.val_list[0].value == 'val1'
    assert obj.val_list[1].obis == '0100010801ff'
    assert obj.val_list[1].value == 'val2'

    class PatchedBuilder(SmlListEntryBuilder):
        BUILDS = SmlListEntry

        def build(self, obj: list, classes):
            ret = super().build(obj, classes)
            ret.obis += '_patched'
            return ret

    obj = builder.build(
        data, {SmlListEntry: PatchedBuilder()})  # type: SmlGetListResponse
    assert obj.sever_id == 'server'
    assert obj.val_list[0].obis == '0100010800ff_patched'
    assert obj.val_list[0].value == 'val1'
    assert obj.val_list[1].obis == '0100010801ff_patched'
    assert obj.val_list[1].value == 'val2'
Ejemplo n.º 5
0
def test_open_response():
    r = SmlOpenResponseBuilder().build(
        in_snip([None, None, 'ab', 'cd', None, 1]), {})
    assert r.format_msg() == '<SmlOpenResponse>\n' \
                             '  codepage   : None\n' \
                             '  client_id  : None\n' \
                             '  req_file_id: ab\n' \
                             '  server_id  : cd\n' \
                             '  ref_time   : None\n' \
                             '  sml_version: 1\n'
Ejemplo n.º 6
0
def test_list_entry():
    data = in_snip([
        None, 'server', None, None,
        [['0100010800ff', None, None, None, None, '76616c31', None],
         ['0100010801ff', None, None, None, None, '76616c32', None]], None,
        None
    ])

    builder = SmlGetListResponseBuilder()
    obj = builder.build(data, {SmlListEntry: SmlListEntryBuilder()})

    assert obj.format_msg() == '<SmlGetListResponse>\n' \
                               '  client_id       : None\n' \
                               '  sever_id        : server\n' \
                               '  list_name       : None\n' \
                               '  act_sensor_time : None\n' \
                               '  val_list:\n' \
                               '    <SmlListEntry>\n' \
                               '      obis           : 0100010800ff (1-0:1.8.0*255)\n' \
                               '      status         : None\n' \
                               '      val_time       : None\n' \
                               '      unit           : None\n' \
                               '      scaler         : None\n' \
                               '      value          : val1\n' \
                               '      value_signature: None\n' \
                               '      -> (Zählerstand Total)\n' \
                               '    <SmlListEntry>\n' \
                               '      obis           : 0100010801ff (1-0:1.8.1*255)\n' \
                               '      status         : None\n' \
                               '      val_time       : None\n' \
                               '      unit           : None\n' \
                               '      scaler         : None\n' \
                               '      value          : val2\n' \
                               '      value_signature: None\n' \
                               '      -> (Zählerstand Tarif 1)\n' \
                               '  list_signature  : None\n' \
                               '  act_gateway_time: None\n'
Ejemplo n.º 7
0
def test_close_response():
    r = SmlCloseResponseBuilder().build(in_snip(['my_sig']), {})
    assert r.format_msg() == '<SmlCloseResponse>\n' \
                             '  global_signature: my_sig\n'
Ejemplo n.º 8
0
def test_exception():
    with pytest.raises(UnsupportedType) as e:
        build_time([in_snip(5), in_snip(55)])
    assert e.value.type == 5
    assert str(e.value) == 'Unsupported type 0x05'