|
3 | 3 | package pass
|
4 | 4 |
|
5 | 5 | import (
|
| 6 | + "encoding/base64" |
| 7 | + "os" |
| 8 | + "path" |
6 | 9 | "strings"
|
7 | 10 | "testing"
|
8 | 11 |
|
@@ -116,6 +119,75 @@ func TestPassHelperList(t *testing.T) {
|
116 | 119 | }
|
117 | 120 | }
|
118 | 121 |
|
| 122 | +// TestPassHelperWithEmptyServer verifies that empty directories (servers |
| 123 | +// without credentials) are ignored, but still returns credentials for other |
| 124 | +// servers. |
| 125 | +func TestPassHelperWithEmptyServer(t *testing.T) { |
| 126 | + helper := Pass{} |
| 127 | + if err := helper.checkInitialized(); err != nil { |
| 128 | + t.Error(err) |
| 129 | + } |
| 130 | + |
| 131 | + creds := []*credentials.Credentials{ |
| 132 | + { |
| 133 | + ServerURL: "https://myreqistry.example.com:2375/v1", |
| 134 | + Username: "foo", |
| 135 | + Secret: "isthebestmeshuggahalbum", |
| 136 | + }, |
| 137 | + { |
| 138 | + ServerURL: "https://index.example.com/v1//access-token", |
| 139 | + }, |
| 140 | + } |
| 141 | + |
| 142 | + t.Cleanup(func() { |
| 143 | + for _, cred := range creds { |
| 144 | + _ = helper.Delete(cred.ServerURL) |
| 145 | + } |
| 146 | + }) |
| 147 | + |
| 148 | + for _, cred := range creds { |
| 149 | + if cred.Username != "" { |
| 150 | + if err := helper.Add(cred); err != nil { |
| 151 | + t.Error(err) |
| 152 | + } |
| 153 | + } else { |
| 154 | + // No credentials; create an empty directory for this server. |
| 155 | + serverURL := base64.URLEncoding.EncodeToString([]byte(cred.ServerURL)) |
| 156 | + p := path.Join(getPassDir(), PASS_FOLDER, serverURL) |
| 157 | + if err := os.Mkdir(p, 0o755); err != nil { |
| 158 | + t.Error(err) |
| 159 | + } |
| 160 | + } |
| 161 | + } |
| 162 | + |
| 163 | + credsList, err := helper.List() |
| 164 | + if err != nil { |
| 165 | + t.Error(err) |
| 166 | + } |
| 167 | + if len(credsList) == 0 { |
| 168 | + t.Error("expected credentials to be returned, but got none") |
| 169 | + } |
| 170 | + for _, cred := range creds { |
| 171 | + if cred.Username != "" { |
| 172 | + userName, secret, err := helper.Get(cred.ServerURL) |
| 173 | + if err != nil { |
| 174 | + t.Error(err) |
| 175 | + } |
| 176 | + if userName != cred.Username { |
| 177 | + t.Errorf("expected username %q, actual: %q", cred.Username, userName) |
| 178 | + } |
| 179 | + if secret != cred.Secret { |
| 180 | + t.Errorf("expected secret %q, actual: %q", cred.Secret, secret) |
| 181 | + } |
| 182 | + } else { |
| 183 | + _, _, err := helper.Get(cred.ServerURL) |
| 184 | + if !credentials.IsErrCredentialsNotFound(err) { |
| 185 | + t.Errorf("expected credentials not found, actual: %v", err) |
| 186 | + } |
| 187 | + } |
| 188 | + } |
| 189 | +} |
| 190 | + |
119 | 191 | func TestMissingCred(t *testing.T) {
|
120 | 192 | helper := Pass{}
|
121 | 193 | if _, _, err := helper.Get("garbage"); !credentials.IsErrCredentialsNotFound(err) {
|
|
0 commit comments