aboutsummaryrefslogtreecommitdiff
path: root/test/code.t
blob: 1752d776a024042bdfa4fea6dd770e53e149f1ec (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
#!/usr/bin/env bash

export test_description='Tests pass otp code generation'

. ./setup.sh

test_expect_success 'Fails for missing secret' '
  test_pass_init &&
  "$PASS" insert passfile <<< "12345"
  test_expect_code 1 pass otp passfile
'

test_expect_success 'Generates TOTP code' '
  uri="otpauth://totp/Example:alice@google.com?secret=JBSWY3DPEHPK3PXP&issuer=Example"

  test_pass_init &&
  "$PASS" otp insert passfile <<< "$uri" &&
  code=$("$PASS" otp passfile) &&
  [[ ${#code} -eq 6 ]]
'

test_expect_success 'Generates HOTP code and increments counter' '
  uri="otpauth://hotp/Example:alice@google.com?secret=JBSWY3DPEHPK3PXP&counter=10&issuer=Example"
  inc="otpauth://hotp/Example:alice@google.com?secret=JBSWY3DPEHPK3PXP&counter=11&issuer=Example"

  test_pass_init &&
  "$PASS" otp insert passfile <<< "$uri" &&
  code=$("$PASS" otp passfile) &&
  [[ ${#code} -eq 6 ]] &&
  [[ $("$PASS" otp uri passfile) == "$inc" ]]
'

test_expect_success 'Generates HOTP code quietly' '
  uri="otpauth://hotp/Example:alice@google.com?secret=JBSWY3DPEHPK3PXP&counter=10&issuer=Example"
  inc="otpauth://hotp/Example:alice@google.com?secret=JBSWY3DPEHPK3PXP&counter=11&issuer=Example"

  test_pass_git_init &&
  "$PASS" otp insert passfile <<< "$uri" &&
  code=$("$PASS" otp -q passfile) &&
  [[ ${#code} -eq 6 ]] &&
  [[ $("$PASS" otp uri passfile) == "$inc" ]]
'

test_expect_success 'HOTP counter increments and preserves multiline contents' '
  uri="otpauth://hotp/Example:alice@google.com?secret=JBSWY3DPEHPK3PXP&counter=10&issuer=Example"
  inc="otpauth://hotp/Example:alice@google.com?secret=JBSWY3DPEHPK3PXP&counter=11&issuer=Example"

  read -r -d "" existing <<EOF
foo bar baz
zab rab oof
$uri
baz bar foo
EOF

  read -r -d "" expected <<EOF
foo bar baz
zab rab oof
$inc
baz bar foo
EOF

  test_pass_init &&
  "$PASS" insert -mf passfile <<< "$existing" &&
  "$PASS" otp code passfile &&
  [[ $("$PASS" show passfile) == "$expected" ]]
'

test_expect_success 'Generates TOTP code for URI with port number' '
  uri="otpauth://totp/Example:alice@domain.com:443?secret=JBSWY3DPEHPK3PXP&issuer=Example"

  test_pass_init &&
  "$PASS" otp insert passfile <<< "$uri" &&
  code=$("$PASS" otp passfile) &&
  [[ ${#code} -eq 6 ]]
'

test_expect_success 'Generates HOTP code for URI with port number' '
  uri="otpauth://hotp/Example:alice@google.com:443?secret=JBSWY3DPEHPK3PXP&counter=10&issuer=Example"
  inc="otpauth://hotp/Example:alice@google.com:443?secret=JBSWY3DPEHPK3PXP&counter=11&issuer=Example"

  test_pass_init &&
  "$PASS" otp insert passfile <<< "$uri" &&
  code=$("$PASS" otp passfile) &&
  [[ ${#code} -eq 6 ]] &&
  [[ $("$PASS" otp uri passfile) == "$inc" ]]
'

test_done