error_test.go raw
1 package database_test
2
3 import (
4 "errors"
5 "testing"
6
7 "github.com/p9c/p9/pkg/database"
8 )
9
10 // TestErrorCodeStringer tests the stringized output for the ErrorCode type.
11 func TestErrorCodeStringer(t *testing.T) {
12 tests := []struct {
13 in database.ErrorCode
14 want string
15 }{
16 {database.ErrDbTypeRegistered, "ErrDbTypeRegistered"},
17 {database.ErrDbUnknownType, "ErrDbUnknownType"},
18 {database.ErrDbDoesNotExist, "ErrDbDoesNotExist"},
19 {database.ErrDbExists, "ErrDbExists"},
20 {database.ErrDbNotOpen, "ErrDbNotOpen"},
21 {database.ErrDbAlreadyOpen, "ErrDbAlreadyOpen"},
22 {database.ErrInvalid, "ErrInvalid"},
23 {database.ErrCorruption, "ErrCorruption"},
24 {database.ErrTxClosed, "ErrTxClosed"},
25 {database.ErrTxNotWritable, "ErrTxNotWritable"},
26 {database.ErrBucketNotFound, "ErrBucketNotFound"},
27 {database.ErrBucketExists, "ErrBucketExists"},
28 {database.ErrBucketNameRequired, "ErrBucketNameRequired"},
29 {database.ErrKeyRequired, "ErrKeyRequired"},
30 {database.ErrKeyTooLarge, "ErrKeyTooLarge"},
31 {database.ErrValueTooLarge, "ErrValueTooLarge"},
32 {database.ErrIncompatibleValue, "ErrIncompatibleValue"},
33 {database.ErrBlockNotFound, "ErrBlockNotFound"},
34 {database.ErrBlockExists, "ErrBlockExists"},
35 {database.ErrBlockRegionInvalid, "ErrBlockRegionInvalid"},
36 {database.ErrDriverSpecific, "ErrDriverSpecific"},
37 {0xffff, "Unknown ErrorCode (65535)"},
38 }
39 // Detect additional error codes that don't have the stringer added.
40 if len(tests)-1 != int(database.TstNumErrorCodes) {
41 t.Errorf("It appears an error code was added without adding " +
42 "an associated stringer test",
43 )
44 }
45 t.Logf("Running %d tests", len(tests))
46 for i, test := range tests {
47 result := test.in.String()
48 if result != test.want {
49 t.Errorf("String #%d\ngot: %s\nwant: %s", i, result,
50 test.want,
51 )
52 continue
53 }
54 }
55 }
56
57 // TestError tests the error output for the DBError type.
58 func TestError(t *testing.T) {
59 t.Parallel()
60 tests := []struct {
61 in database.DBError
62 want string
63 }{
64 {
65 database.DBError{Description: "some error"},
66 "some error",
67 },
68 {
69 database.DBError{Description: "human-readable error"},
70 "human-readable error",
71 },
72 {
73 database.DBError{
74 ErrorCode: database.ErrDriverSpecific,
75 Description: "some error",
76 Err: errors.New("driver-specific error"),
77 },
78 "some error: driver-specific error",
79 },
80 }
81 t.Logf("Running %d tests", len(tests))
82 for i, test := range tests {
83 result := test.in.Error()
84 if result != test.want {
85 t.Errorf("DBError #%d\n got: %s want: %s", i, result,
86 test.want,
87 )
88 continue
89 }
90 }
91 }
92