diff options
Diffstat (limited to 'verify_test.go')
| -rw-r--r-- | verify_test.go | 146 |
1 files changed, 47 insertions, 99 deletions
diff --git a/verify_test.go b/verify_test.go index 0689be1..769bfbc 100644 --- a/verify_test.go +++ b/verify_test.go @@ -1,4 +1,4 @@ -package eduvpn_verify +package eduvpn_discovery import ( "bufio" @@ -10,59 +10,18 @@ import ( "testing" ) -const ( - ok = -1 - errAny = -2 -) - -func compareResults(t *testing.T, ret bool, err error, expected int, call func() string) { - getCode := func(err error) int { - switch e := err.(type) { - case detailedVerifyError: - return int(e.Code) - case VerifyError: - return int(e.Code) - } - panic(nil) - } - - if (err == nil) != (expected == ok) || err != nil && expected != errAny && getCode(err) != expected { - var errMsg string - if err != nil { - errMsg = fmt.Sprintf("%v %v (cause %v)", getCode(err), err, errors.Unwrap(err)) - } else { - errMsg = "<ok>" - } - - var wantErrCode string - switch expected { - case ok: - wantErrCode = "<ok>" - case errAny: - wantErrCode = "<any>" - default: - wantErrCode = strconv.Itoa(expected) - } - - t.Errorf("%v\nerror = %v, wantErr %v", call(), errMsg, wantErrCode) - return - } - if ret != (expected == ok) { - t.Errorf("%v\n= %v, want %v", call(), ret, expected == ok) - } -} - func Test_verifyWithKeys(t *testing.T) { var err error var pk []string { - file, err := os.Open("test_data/dummy/public.key") + file, err := os.Open("test_data/public.key") if err != nil { panic(err) } defer file.Close() + // Get last line (key string) from file scanner := bufio.NewScanner(file) for i := 0; i < 2; i++ { if !scanner.Scan() { @@ -123,29 +82,24 @@ func Test_verifyWithKeys(t *testing.T) { {errInvalidPublicKey, "invalid allowed key", "server_list.json.minisig", "server_list.json", "server_list.json", 10, []string{"AAA"}}, } + // Cache file contents in map, mapping file names to contents files := map[string][]byte{} - for _, test := range tests { - signature, loaded := files[test.signatureFile] + loadFile := func(name string) { + content, loaded := files[name] if !loaded { - signature, err = ioutil.ReadFile("test_data/dummy/" + test.signatureFile) + content, err = ioutil.ReadFile("test_data/" + name) if err != nil { panic(err) } - files[test.signatureFile] = signature - } - - json, loaded := files[test.jsonFile] - if !loaded { - json, err = ioutil.ReadFile("test_data/dummy/" + test.jsonFile) - if err != nil { - panic(err) - } - files[test.jsonFile] = json + files[name] = content } } + for _, test := range tests { + loadFile(test.signatureFile) + loadFile(test.jsonFile) + } for _, tt := range tests { - tt := tt t.Run(tt.testName, func(t *testing.T) { t.Parallel() valid, err := verifyWithKeys(string(files[tt.signatureFile]), files[tt.jsonFile], @@ -158,52 +112,46 @@ func Test_verifyWithKeys(t *testing.T) { } } -func Test_Verify(t *testing.T) { - var err error - tests := []struct { - result VerifyErrorCode - testName string - signatureFile string - jsonFile string - expectedFileName string - minSignTime uint64 - }{ - //TODO tests with real valid *prehashed* signatures - {ErrInvalidSignature, "pure server_list", "server_list-1.json.pure.minisig", "server_list-1.json", "server_list.json", 1636532223}, - {ErrInvalidSignature, "pure organization_list", "organization_list-1.json.pure.minisig", "organization_list-1.json", "organization_list.json", 1636532223}, - {ErrInvalidSignatureUnknownKey, "wrong key", "../dummy/server_list.json.minisig", "../dummy/server_list.json", "server_list.json", 10}, +const ( + ok = -1 // Test should not give an error. + errAny = -2 // Test should give any error (specific error is an implementation detail). +) + +// compareResults compares returned ret, err from a verify function with expected error code expected. +// callStr is called to get the formatted parameters passed to the function. +func compareResults(t *testing.T, ret bool, err error, expected int, callStr func() string) { + getCode := func(err error) int { + switch e := err.(type) { + case detailedVerifyError: + return int(e.Code) + case VerifyError: + return int(e.Code) + } + panic(nil) } - files := map[string][]byte{} - for _, test := range tests { - signature, loaded := files[test.signatureFile] - if !loaded { - signature, err = ioutil.ReadFile("test_data/real/" + test.signatureFile) - if err != nil { - panic(err) - } - files[test.signatureFile] = signature + if (err == nil) != (expected == ok) || err != nil && expected != errAny && getCode(err) != expected { + var errMsg string + if err != nil { + errMsg = fmt.Sprintf("%v %v (cause %v)", getCode(err), err, errors.Unwrap(err)) + } else { + errMsg = "<ok>" } - json, loaded := files[test.jsonFile] - if !loaded { - json, err = ioutil.ReadFile("test_data/real/" + test.jsonFile) - if err != nil { - panic(err) - } - files[test.jsonFile] = json + var wantErrCode string + switch expected { + case ok: + wantErrCode = "<ok>" + case errAny: + wantErrCode = "<any>" + default: + wantErrCode = strconv.Itoa(expected) } - } - for _, tt := range tests { - tt := tt - t.Run(tt.testName, func(t *testing.T) { - t.Parallel() - valid, err := Verify(string(files[tt.signatureFile]), files[tt.jsonFile], tt.expectedFileName, tt.minSignTime) - compareResults(t, valid, err, int(tt.result), func() string { - return fmt.Sprintf("Verify(%q, %q, %q, %v)", - tt.signatureFile, tt.jsonFile, tt.expectedFileName, tt.minSignTime) - }) - }) + t.Errorf("%v\nerror = %v, wantErr %v", callStr(), errMsg, wantErrCode) + return + } + if ret != (expected == ok) { + t.Errorf("%v\n= %v, want %v", callStr(), ret, expected == ok) } } |
