github.com/mika/distribution@v2.2.2-0.20160108133430-a75790e3d8e0+incompatible/registry/auth/htpasswd/htpasswd_test.go (about) 1 package htpasswd 2 3 import ( 4 "fmt" 5 "reflect" 6 "strings" 7 "testing" 8 ) 9 10 func TestParseHTPasswd(t *testing.T) { 11 12 for _, tc := range []struct { 13 desc string 14 input string 15 err error 16 entries map[string][]byte 17 }{ 18 { 19 desc: "basic example", 20 input: ` 21 # This is a comment in a basic example. 22 bilbo:{SHA}5siv5c0SHx681xU6GiSx9ZQryqs= 23 frodo:$2y$05$926C3y10Quzn/LnqQH86VOEVh/18T6RnLaS.khre96jLNL/7e.K5W 24 MiShil:$2y$05$0oHgwMehvoe8iAWS8I.7l.KoECXrwVaC16RPfaSCU5eVTFrATuMI2 25 DeokMan:공주님 26 `, 27 entries: map[string][]byte{ 28 "bilbo": []byte("{SHA}5siv5c0SHx681xU6GiSx9ZQryqs="), 29 "frodo": []byte("$2y$05$926C3y10Quzn/LnqQH86VOEVh/18T6RnLaS.khre96jLNL/7e.K5W"), 30 "MiShil": []byte("$2y$05$0oHgwMehvoe8iAWS8I.7l.KoECXrwVaC16RPfaSCU5eVTFrATuMI2"), 31 "DeokMan": []byte("공주님"), 32 }, 33 }, 34 { 35 desc: "ensures comments are filtered", 36 input: ` 37 # asdf:asdf 38 `, 39 }, 40 { 41 desc: "ensure midline hash is not comment", 42 input: ` 43 asdf:as#df 44 `, 45 entries: map[string][]byte{ 46 "asdf": []byte("as#df"), 47 }, 48 }, 49 { 50 desc: "ensure midline hash is not comment", 51 input: ` 52 # A valid comment 53 valid:entry 54 asdf 55 `, 56 err: fmt.Errorf(`htpasswd: invalid entry at line 4: "asdf"`), 57 }, 58 } { 59 60 entries, err := parseHTPasswd(strings.NewReader(tc.input)) 61 if err != tc.err { 62 if tc.err == nil { 63 t.Fatalf("%s: unexpected error: %v", tc.desc, err) 64 } else { 65 if err.Error() != tc.err.Error() { // use string equality here. 66 t.Fatalf("%s: expected error not returned: %v != %v", tc.desc, err, tc.err) 67 } 68 } 69 } 70 71 if tc.err != nil { 72 continue // don't test output 73 } 74 75 // allow empty and nil to be equal 76 if tc.entries == nil { 77 tc.entries = map[string][]byte{} 78 } 79 80 if !reflect.DeepEqual(entries, tc.entries) { 81 t.Fatalf("%s: entries not parsed correctly: %v != %v", tc.desc, entries, tc.entries) 82 } 83 } 84 85 }