@@ -15,15 +15,107 @@ package truststore
1515
1616import (
1717 "errors"
18+ "os"
1819 "path/filepath"
20+ "runtime"
21+ "strings"
1922 "testing"
23+
24+ "github.com/notaryproject/notation-go/dir"
2025)
2126
22- func TestEmptyCertFile (t * testing.T ) {
23- path := filepath .FromSlash ("../../../../internal/testdata/Empty.txt" )
24- expectedErr := errors .New ("no valid certificate found in the empty file" )
25- err := AddCert (path , "ca" , "test" , false )
26- if err == nil || err .Error () != "no valid certificate found in the file" {
27- t .Fatalf ("expected err: %v, got: %v" , expectedErr , err )
28- }
27+ func TestAddCert (t * testing.T ) {
28+ defer func (oldDir string ) {
29+ dir .UserConfigDir = oldDir
30+ }(dir .UserConfigDir )
31+
32+ t .Run ("empty store type" , func (t * testing.T ) {
33+ expectedErrMsg := "store type cannot be empty"
34+ err := AddCert ("" , "" , "test" , false )
35+ if err == nil || err .Error () != expectedErrMsg {
36+ t .Fatalf ("expected err: %v, but got: %v" , expectedErrMsg , err )
37+ }
38+ })
39+
40+ t .Run ("invalid store type" , func (t * testing.T ) {
41+ expectedErrMsg := "unsupported store type: invalid"
42+ err := AddCert ("" , "invalid" , "test" , false )
43+ if err == nil || err .Error () != expectedErrMsg {
44+ t .Fatalf ("expected err: %v, but got: %v" , expectedErrMsg , err )
45+ }
46+ })
47+
48+ t .Run ("invalid store name" , func (t * testing.T ) {
49+ expectedErrMsg := "named store name needs to follow [a-zA-Z0-9_.-]+ format"
50+ err := AddCert ("" , "ca" , "test%" , false )
51+ if err == nil || err .Error () != expectedErrMsg {
52+ t .Fatalf ("expected err: %v, but got: %v" , expectedErrMsg , err )
53+ }
54+ })
55+
56+ t .Run ("no valid certificate in file" , func (t * testing.T ) {
57+ path := filepath .FromSlash ("testdata/invalid.txt" )
58+ expectedErrMsg := "x509: malformed certificate"
59+ err := AddCert (path , "ca" , "test" , false )
60+ if err == nil || err .Error () != expectedErrMsg {
61+ t .Fatalf ("expected err: %v, but got: %v" , expectedErrMsg , err )
62+ }
63+ })
64+
65+ t .Run ("cert already exists" , func (t * testing.T ) {
66+ dir .UserConfigDir = "testdata"
67+ path := filepath .FromSlash ("testdata/self-signed.crt" )
68+ expectedErrMsg := "certificate already exists in the Trust Store"
69+ err := AddCert (path , "ca" , "test" , false )
70+ if err == nil || err .Error () != expectedErrMsg {
71+ t .Fatalf ("expected err: %v, but got: %v" , expectedErrMsg , err )
72+ }
73+ })
74+
75+ t .Run ("empty file" , func (t * testing.T ) {
76+ path := filepath .FromSlash ("../../../../internal/testdata/Empty.txt" )
77+ expectedErr := errors .New ("no valid certificate found in the empty file" )
78+ err := AddCert (path , "ca" , "test" , false )
79+ if err == nil || err .Error () != "no valid certificate found in the file" {
80+ t .Fatalf ("expected err: %v, but got: %v" , expectedErr , err )
81+ }
82+ })
83+
84+ t .Run ("failed to add cert to store" , func (t * testing.T ) {
85+ if runtime .GOOS == "windows" {
86+ t .Skip ("skipping test on Windows" )
87+ }
88+
89+ dir .UserConfigDir = t .TempDir ()
90+ if err := os .Chmod (dir .UserConfigDir , 0000 ); err != nil {
91+ t .Fatal (err )
92+ }
93+ defer os .Chmod (dir .UserConfigDir , 0700 )
94+
95+ path := filepath .FromSlash ("testdata/NotationTestRoot.pem" )
96+ expectedErrMsg := "permission denied"
97+ err := AddCert (path , "ca" , "test" , false )
98+ if err == nil || ! strings .Contains (err .Error (), expectedErrMsg ) {
99+ t .Fatalf ("expected err: %v, but got: %v" , expectedErrMsg , err )
100+ }
101+ })
102+ }
103+
104+ func TestDeleteAllCerts (t * testing.T ) {
105+ defer func (oldDir string ) {
106+ dir .UserConfigDir = oldDir
107+ }(dir .UserConfigDir )
108+
109+ t .Run ("store does not exist" , func (t * testing.T ) {
110+ if runtime .GOOS == "windows" {
111+ t .Skip ("skipping test on Windows" )
112+ }
113+
114+ dir .UserConfigDir = "testdata"
115+ expectedErrMsg := `stat testdata/truststore/x509/tsa/test: no such file or directory`
116+ err := DeleteAllCerts ("tsa" , "test" , true )
117+ if err == nil || err .Error () != expectedErrMsg {
118+ t .Fatalf ("expected err: %v, but got: %v" , expectedErrMsg , err )
119+ }
120+ })
29121}
0 commit comments