summaryrefslogtreecommitdiffstats
path: root/tests/zcrc.js
blob: 0698fa43047d9f92ff87be5c7eae8a7b5f790414 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#!/usr/bin/env node

"use strict";

var tape = require('blue-tape');

var Zmodem = Object.assign(
    {},
    require('../src/zcrc')
);

var zcrc = Zmodem.CRC;

tape('crc16', function(t) {
    t.deepEqual(
        zcrc.crc16( [ 0x0d, 0x0a ] ),
        [ 0xd7, 0x16 ],
        'crc16 - first test'
    );

    t.deepEqual(
        zcrc.crc16( [ 0x11, 0x17, 0, 0, 0 ] ),
        [ 0xe4, 0x81 ],
        'crc16 - second test'
    );

    t.end();
} );

tape('verify16', function(t) {
    t.doesNotThrow(
        () => zcrc.verify16( [ 0x0d, 0x0a ], [ 0xd7, 0x16 ] ),
        'verify16 - no throw on good'
    );

    var err;
    try { zcrc.verify16( [ 0x0d, 0x0a ], [ 0xd7, 16 ] ) }
    catch(e) { err = e };

    t.ok(
        /215,16.*215,22/.test(err.message),
        'verify16 - throw on bad (message)'
    );

    t.ok(
        err instanceof Zmodem.Error,
        'verify16 - typed error'
    );

    t.ok(
        err.type,
        'verify16 - error type'
    );

    t.end();
} );

//----------------------------------------------------------------------
// The crc32 logic is unused for now, but some misbehaving ZMODEM
// implementation might send CRC32 regardless of that we don’t
// advertise it.
//----------------------------------------------------------------------

tape('crc32', function(t) {
    const tests = [
        [ [ 4, 0, 0, 0, 0 ], [ 0xdd, 0x51, 0xa2, 0x33 ] ],
        [ [ 11, 17, 0, 0, 0 ], [ 0xf6, 0xf6, 0x57, 0x59 ] ],
        [ [ 3, 0, 0, 0, 0 ], [ 205, 141, 130, 129 ] ],
    ];
//    } [ 3, 0, 0, 0, 0 ] [ 205, 141, 131, -127 ]
//2172816845
//crc32 [ 3, 0, 0, 0, 0 ] -2122150451

    tests.forEach( (cur_t) => {
        let [ input, output ] = cur_t;

        t.deepEqual(
            zcrc.crc32(input),
            output,
            "crc32: " + input.join(", ")
        );
    } );

    t.end();
} );

tape('verify32', function(t) {
    t.doesNotThrow(
        () => zcrc.verify32( [ 4, 0, 0, 0, 0 ], [ 0xdd, 0x51, 0xa2, 0x33 ] ),
        'verify32 - no throw on good'
    );

    var err;
    try { zcrc.verify32( [ 4, 0, 0, 0, 0 ], [ 1,2,3,4 ] ) }
    catch(e) { err = e };

    t.ok(
        /1,2,3,4.*221,81,162,51/.test(err.message),
        'verify32 - throw on bad (message)'
    );

    t.ok(
        err instanceof Zmodem.Error,
        'verify32 - typed error'
    );

    t.ok(
        err.type,
        'verify32 - error type'
    );

    t.end();
} );