@@ -14,6 +14,16 @@ import (
1414"github.com/coder/coder/v2/cli/sessionstore"
1515)
1616
17+ func readRawKeychainCredential (t * testing.T ,serviceName string ) []byte {
18+ t .Helper ()
19+
20+ winCred ,err := wincred .GetGenericCredential (serviceName )
21+ if err != nil {
22+ t .Fatal (err )
23+ }
24+ return winCred .CredentialBlob
25+ }
26+
1727func TestWindowsKeyring_WriteReadDelete (t * testing.T ) {
1828t .Parallel ()
1929
@@ -38,10 +48,7 @@ func TestWindowsKeyring_WriteReadDelete(t *testing.T) {
3848winCred ,err := wincred .GetGenericCredential (serviceName )
3949require .NoError (t ,err ,"getting windows credential" )
4050
41- var storedCreds map [string ]struct {
42- CoderURL string `json:"coder_url"`
43- APIToken string `json:"api_token"`
44- }
51+ storedCreds := make (storedCredentials )
4552err = json .Unmarshal (winCred .CredentialBlob ,& storedCreds )
4653require .NoError (t ,err ,"unmarshalling stored credentials" )
4754
@@ -65,63 +72,3 @@ func TestWindowsKeyring_WriteReadDelete(t *testing.T) {
6572_ ,err = backend .Read (srvURL )
6673require .ErrorIs (t ,err ,os .ErrNotExist )
6774}
68-
69- func TestWindowsKeyring_MultipleServers (t * testing.T ) {
70- t .Parallel ()
71-
72- const testURL1 = "http://127.0.0.1:1337"
73- srv1URL ,err := url .Parse (testURL1 )
74- require .NoError (t ,err )
75-
76- const testURL2 = "http://127.0.0.1:1338"
77- srv2URL ,err := url .Parse (testURL2 )
78- require .NoError (t ,err )
79-
80- serviceName := keyringTestServiceName (t )
81- backend := sessionstore .NewKeyringWithService (serviceName )
82- t .Cleanup (func () {
83- _ = backend .Delete (srv1URL )
84- _ = backend .Delete (srv2URL )
85- })
86-
87- // Write token for server 1
88- const token1 = "token-server-1"
89- err = backend .Write (srv1URL ,token1 )
90- require .NoError (t ,err )
91-
92- // Write token for server 2 (should NOT overwrite server 1's token)
93- const token2 = "token-server-2"
94- err = backend .Write (srv2URL ,token2 )
95- require .NoError (t ,err )
96-
97- // Verify both credentials are stored in Windows Credential Manager
98- winCred ,err := wincred .GetGenericCredential (serviceName )
99- require .NoError (t ,err ,"getting windows credential" )
100-
101- var storedCreds map [string ]struct {
102- CoderURL string `json:"coder_url"`
103- APIToken string `json:"api_token"`
104- }
105- err = json .Unmarshal (winCred .CredentialBlob ,& storedCreds )
106- require .NoError (t ,err ,"unmarshalling stored credentials" )
107-
108- // Both credentials should exist
109- require .Len (t ,storedCreds ,2 )
110- require .Equal (t ,token1 ,storedCreds [srv1URL .Host ].APIToken )
111- require .Equal (t ,token2 ,storedCreds [srv2URL .Host ].APIToken )
112-
113- // Read individual credentials
114- token ,err := backend .Read (srv1URL )
115- require .NoError (t ,err )
116- require .Equal (t ,token1 ,token )
117-
118- token ,err = backend .Read (srv2URL )
119- require .NoError (t ,err )
120- require .Equal (t ,token2 ,token )
121-
122- // Cleanup
123- err = backend .Delete (srv1URL )
124- require .NoError (t ,err )
125- err = backend .Delete (srv2URL )
126- require .NoError (t ,err )
127- }