Skip to content

Instantly share code, notes, and snippets.

@alvaroaleman
Created February 25, 2021 23:08
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save alvaroaleman/32b224edd095176acff0843ab5885cf2 to your computer and use it in GitHub Desktop.
Save alvaroaleman/32b224edd095176acff0843ab5885cf2 to your computer and use it in GitHub Desktop.
serve.go:414: debug server listening at http://localhost:40123
[Trace - 17:58:42.408 PM] Sending request 'initialize - (1)'.
Params: {"rootUri":"file:///home/alvaro/git/golang/src/github.com/openshift/ci-tools","capabilities":{"workspace":{"workspaceFolders":true,"configuration":true,"didChangeConfiguration":{"dynamicRegistration":true}},"textDocument":{"codeAction":{"codeActionLiteralSupport":{"codeActionKind":{"valueSet":["source.organizeImports","refactor.rewrite"]}}},"completion":{"completionItem":{"snippetSupport":false}},"hover":{"contentFormat":["plaintext"]}}},"processId":3392083,"workspaceFolders":[{"uri":"file:///home/alvaro/git/golang/src/github.com/openshift/ci-tools","name":"/home/alvaro/git/golang/src/github.com/openshift/ci-tools"}]}
[Trace - 17:58:42.408 PM] Received notification 'window/logMessage'.
Params: {"type":3,"message":"2021/02/25 17:58:42 Handshake session update\n\tupdate_session=2\n\tdebug_address=\"[::]:40123\"\n\tlogfile=\"/tmp/gopls-3392085.log\"\n\tserver=\"1\"\n\tgopls_path=\"/home/alvaro/git/golang/bin/gopls\"\n"}
[Trace - 17:58:42.486 PM] Received response 'initialize - (1)' in 78ms.
Result: {"capabilities":{"textDocumentSync":{"change":2,"openClose":true,"save":{}},"completionProvider":{"triggerCharacters":["."]},"hoverProvider":true,"signatureHelpProvider":{"triggerCharacters":["(",","]},"definitionProvider":true,"typeDefinitionProvider":true,"implementationProvider":true,"referencesProvider":true,"documentHighlightProvider":true,"documentSymbolProvider":true,"codeActionProvider":{"codeActionKinds":["quickfix","refactor.extract","refactor.rewrite","source.fixAll","source.organizeImports"]},"codeLensProvider":{},"documentLinkProvider":{},"workspaceSymbolProvider":true,"documentFormattingProvider":true,"documentOnTypeFormattingProvider":{"firstTriggerCharacter":""},"renameProvider":true,"foldingRangeProvider":true,"executeCommandProvider":{"commands":["gopls.add_dependency","gopls.add_import","gopls.apply_fix","gopls.check_upgrades","gopls.gc_details","gopls.generate","gopls.generate_gopls_mod","gopls.go_get_package","gopls.list_known_packages","gopls.regenerate_cgo","gopls.remove_dependency","gopls.run_tests","gopls.test","gopls.tidy","gopls.toggle_gc_details","gopls.update_go_sum","gopls.upgrade_dependency","gopls.vendor"]},"callHierarchyProvider":true},"serverInfo":{"name":"gopls","version":"{\"path\":\"golang.org/x/tools/gopls\",\"version\":\"v0.6.6\",\"sum\":\"h1:GmCsAKZMEb1BD1BTWnQrMyx4FmNThlEsmuFiJbLBXio=\",\"deps\":[{\"path\":\"github.com/BurntSushi/toml\",\"version\":\"v0.3.1\",\"sum\":\"h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=\"},{\"path\":\"github.com/google/go-cmp\",\"version\":\"v0.5.4\",\"sum\":\"h1:L8R9j+yAqZuZjsqh/z+F1NCffTKKLShY6zXTItVIZ8M=\"},{\"path\":\"github.com/sergi/go-diff\",\"version\":\"v1.1.0\",\"sum\":\"h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0=\"},{\"path\":\"golang.org/x/mod\",\"version\":\"v0.4.1\",\"sum\":\"h1:Kvvh58BN8Y9/lBi7hTekvtMpm07eUZ0ck5pRHpsMWrY=\"},{\"path\":\"golang.org/x/sync\",\"version\":\"v0.0.0-20201020160332-67f06af15bc9\",\"sum\":\"h1:SQFwaSi55rU7vdNs9Yr0Z324VNlrF+0wMqRXT4St8ck=\"},{\"path\":\"golang.org/x/sys\",\"version\":\"v0.0.0-20210124154548-22da62e12c0c\",\"sum\":\"h1:VwygUrnw9jn88c4u8GD3rZQbqrP/tgas88tPUbBxQrk=\"},{\"path\":\"golang.org/x/tools\",\"version\":\"v0.1.1-0.20210222172741-77e031214674\",\"sum\":\"h1:XzEjy9Ks1MwmcJOarbxTnL/AqHtzsRfRzAwfDhII2lE=\"},{\"path\":\"golang.org/x/xerrors\",\"version\":\"v0.0.0-20200804184101-5ec99f83aff1\",\"sum\":\"h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=\"},{\"path\":\"honnef.co/go/tools\",\"version\":\"v0.1.1\",\"sum\":\"h1:EVDuO03OCZwpV2t/tLLxPmPiomagMoBOgfPt0FM+4IY=\"},{\"path\":\"mvdan.cc/gofumpt\",\"version\":\"v0.1.0\",\"sum\":\"h1:hsVv+Y9UsZ/mFZTxJZuHVI6shSQCtzZ11h1JEFPAZLw=\"},{\"path\":\"mvdan.cc/xurls/v2\",\"version\":\"v2.2.0\",\"sum\":\"h1:NSZPykBXJFCetGZykLAxaL6SIpvbVy/UFEniIfHAa8A=\"}]}"}}
[Trace - 17:58:42.492 PM] Sending notification 'initialized'.
Params: {}
[Trace - 17:58:42.492 PM] Sending notification 'workspace/didChangeWorkspaceFolders'.
Params: {"event":{"added":[{"uri":"file:///home/alvaro/git/golang/src/github.com/openshift/ci-tools","name":"/home/alvaro/git/golang/src/github.com/openshift/ci-tools"}],"removed":[]}}
[Trace - 17:58:42.493 PM] Sending notification 'textDocument/didOpen'.
Params: {"textDocument":{"uri":"file:///home/alvaro/git/golang/src/github.com/openshift/ci-tools/cmd/secret-collection-manager/main_test.go","version":2,"languageId":"go","text":"package main\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n\t\"os\"\n\t\"os/exec\"\n\t\"reflect\"\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/google/go-cmp/cmp\"\n\t\"github.com/hashicorp/vault/api\"\n\t\"github.com/sirupsen/logrus\"\n\tutilerrors \"k8s.io/apimachinery/pkg/util/errors\"\n\n\t\"github.com/openshift/ci-tools/pkg/vaultclient\"\n)\n\nconst vaultTestingToken = \"jpuxZFWWFW7vM882GGX2aWOE\"\n\nfunc TestSecretCollectionManager(t *testing.T) {\n\tif _, err := exec.LookPath(\"vault\"); err != nil {\n\t\tif _, runningInCi := os.LookupEnv(\"CI\"); runningInCi {\n\t\t\tt.Fatalf(\"could not find vault in path: %v\", err)\n\t\t}\n\t\tt.Skip(\"could not find vault in path\")\n\t}\n\tif os.Getenv(\"CI\") != \"\" {\n\t\t// We need a writeable home\n\t\tos.Setenv(\"HOME\", \"/tmp\")\n\t}\n\tlogrus.SetLevel(logrus.TraceLevel)\n\n\tvaultCancel, vaultDone, err := startVault(t)\n\tif err != nil {\n\t\tt.Fatalf(\"failed to start vault: %v\", err)\n\t}\n\tt.Cleanup(func() {\n\t\tvaultCancel()\n\t\t<-vaultDone\n\t})\n\n\tclient, err := vaultclient.New(\"http://127.0.0.1:8300\", vaultTestingToken)\n\tif err != nil {\n\t\tt.Fatalf(\"failed to construct vault client: %v\", err)\n\t}\n\n\tif err := client.Sys().EnableAuthWithOptions(\"userpass\", &api.EnableAuthOptions{Type: \"userpass\"}); err != nil {\n\t\tt.Fatalf(\"failed to enable userpass auth: %v\", err)\n\t}\n\n\tmounts, err := client.ListAuthMounts()\n\tif err != nil {\n\t\tt.Fatalf(\"failed to list auth mounts: %v\", err)\n\t}\n\tvar mountAccessor string\n\tfor _, mount := range mounts {\n\t\tif mount.Type == \"userpass\" {\n\t\t\tmountAccessor = mount.Accessor\n\t\t\tbreak\n\t\t}\n\t}\n\tif mountAccessor == \"\" {\n\t\tt.Fatalf(\"failed to find userpass mount\")\n\t}\n\n\tfor _, user := range []string{\"user-1\", \"user-2\"} {\n\t\tif _, err := client.Logical().Write(fmt.Sprintf(\"/auth/userpass/users/%s\", user), map[string]interface{}{\"password\": \"irrelevant\"}); err != nil {\n\t\t\tt.Fatalf(\"failed to create userpass user %s: %v\", user, err)\n\t\t}\n\t\tidentity, err := client.CreateIdentity(user, []string{\"default\"})\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"failed to create identity for user %s: %v\", user, err)\n\t\t}\n\t\tif _, err := client.Logical().Write(\"identity/entity-alias\", map[string]interface{}{\n\t\t\t\"name\": user,\n\t\t\t\"canonical_id\": identity.ID,\n\t\t\t\"mount_accessor\": mountAccessor,\n\t\t}); err != nil {\n\t\t\tt.Fatalf(\"failed to create identity alias for user %s in mount_accessor %s: %v\", user, mountAccessor, err)\n\t\t}\n\t}\n\n\tctx, cancel := context.WithCancel(context.Background())\n\tdefer cancel()\n\tserver := server(client, \"secret/self-managed\")\n\tgo func() {\n\t\tif err := server.ListenAndServe(); err != nil && ctx.Err() == nil {\n\t\t\tcancel()\n\t\t\tt.Errorf(\"failed to start secret-collection-manager: %v\", err)\n\t\t}\n\t}()\n\n\tif err := waitForServiceReady(ctx, t, \"http://127.0.0.1:8080/healthz\"); err != nil {\n\t\tt.Fatalf(\"failed to wait for secret collection manager to become ready: %v\", err)\n\t}\n\tt.Cleanup(func() {\n\t\tif err := server.Close(); err != nil {\n\t\t\tt.Errorf(\"failed to close server: %v\", err)\n\t\t}\n\t})\n\n\ttestCases := []struct {\n\t\tname string\n\t\tuser string\n\t\trequest *http.Request\n\t\texpectedStatusCode int\n\t\texpectedBody string\n\t\texpectedVaultGroups []vaultclient.Group\n\t\texpectedVaultPolicies []string\n\t}{\n\t\t{\n\t\t\tname: \"Initial listing as user 1, no policies\",\n\t\t\tuser: \"user-1\",\n\t\t\trequest: mustNewRequest(http.MethodGet, \"http://127.0.0.1:8080/secretcollection\", nil),\n\t\t\texpectedStatusCode: 200,\n\t\t\texpectedVaultPolicies: []string{\"default\", \"root\"},\n\t\t},\n\t\t{\n\t\t\tname: \"User 1 creates policy\",\n\t\t\tuser: \"user-1\",\n\t\t\trequest: mustNewRequest(http.MethodPut, \"http://127.0.0.1:8080/secretcollection/mine-alone\", nil),\n\t\t\texpectedStatusCode: 200,\n\t\t\texpectedVaultGroups: []vaultclient.Group{{\n\t\t\t\tName: \"secret-collection-manager-managed-mine-alone\",\n\t\t\t\tPolicies: []string{\"secret-collection-manager-managed-mine-alone\"},\n\t\t\t\tMemberEntityIDs: []string{\"entity-0\"},\n\t\t\t\tMetadata: map[string]string{\"created-by-secret-collection-manager\": \"true\"},\n\t\t\t\tModifyIndex: 1,\n\t\t\t}},\n\t\t\texpectedVaultPolicies: []string{\"default\", \"secret-collection-manager-managed-mine-alone\", \"root\"},\n\t\t},\n\t}\n\n\t// These tests mutate state in vault, so they need to be executed serially\n\tfor _, tc := range testCases {\n\t\tt.Run(tc.name, func(t *testing.T) {\n\t\t\ttc.request.Header.Set(\"X-Forwarded-Email\", fmt.Sprintf(\"%s@unchecked.com\", tc.user))\n\t\t\tresponse, err := http.DefaultClient.Do(tc.request)\n\t\t\tif err != nil {\n\t\t\t\tt.Fatalf(\"request failed: %v\", err)\n\t\t\t}\n\t\t\tdefer response.Body.Close()\n\t\t\tif response.StatusCode != tc.expectedStatusCode {\n\t\t\t\tt.Fatalf(\"expected status code %d, got %d\", tc.expectedStatusCode, response.StatusCode)\n\t\t\t}\n\n\t\t\tbodyData, err := io.ReadAll(response.Body)\n\t\t\tif err != nil {\n\t\t\t\tt.Fatalf(\"failed to read response body: %v\", err)\n\t\t\t}\n\t\t\tif diff := cmp.Diff(tc.expectedBody, string(bodyData)); diff != \"\" {\n\t\t\t\tt.Errorf(\"expected body differs from actual: %s\", diff)\n\t\t\t}\n\n\t\t\tgroups, err := client.GetAllGroups()\n\t\t\tif err != nil {\n\t\t\t\tt.Fatalf(\"failed to get all groups: %v\", err)\n\t\t\t}\n\t\t\tfor idx := range groups {\n\t\t\t\tgroups[idx].ID = \"\"\n\t\t\t\tgroups[idx].CreationTime = nil\n\t\t\t\tgroups[idx].LastUpdateTime = nil\n\t\t\t\tgroups[idx].Type = \"\"\n\t\t\t\tgroups[idx].NamespaceID = \"\"\n\t\t\t\tif reflect.DeepEqual(groups[idx].Alias, emptyVaultAlias) {\n\t\t\t\t\t// The server doesn't use omitempty, so defining it as pointer with omitempty clientside is useless,\n\t\t\t\t\tgroups[idx].Alias = nil\n\t\t\t\t}\n\t\t\t\tfor memberIdIdx := range groups[idx].MemberEntityIDs {\n\t\t\t\t\tgroups[idx].MemberEntityIDs[memberIdIdx] = fmt.Sprintf(\"entity-%d\", memberIdIdx)\n\t\t\t\t}\n\t\t\t}\n\t\t\tif diff := cmp.Diff(tc.expectedVaultGroups, groups); diff != \"\" {\n\t\t\t\tt.Errorf(\"expectedVaultGroups differ from actual: %s\", diff)\n\t\t\t}\n\t\t\tpolicies, err := client.Sys().ListPolicies()\n\t\t\tif err != nil {\n\t\t\t\tt.Fatalf(\"failed to list policies: %v\", err)\n\t\t\t}\n\t\t\tif diff := cmp.Diff(tc.expectedVaultPolicies, policies); diff != \"\" {\n\t\t\t\tt.Errorf(\"expected vault policies differ from actual: %s\", diff)\n\t\t\t}\n\n\t\t})\n\t}\n}\n\nvar emptyVaultAlias = &vaultclient.Alias{}\n\nfunc mustNewRequest(method, url string, body io.Reader) *http.Request {\n\trequest, err := http.NewRequest(method, url, body)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\treturn request\n}\n\nfunc startVault(t *testing.T) (cancel context.CancelFunc, done chan struct{}, err error) {\n\tctx, cancel := context.WithCancel(context.Background())\n\n\tcmd := exec.CommandContext(ctx, \"vault\",\n\t\t\"server\",\n\t\t\"-dev\",\n\t\t\"--dev-listen-address=127.0.0.1:8300\",\n\t\tfmt.Sprintf(\"-dev-root-token-id=%s\", vaultTestingToken),\n\t)\n\n\tdone = make(chan struct{})\n\tgotReady := make(chan struct{})\n\tgo func() {\n\t\tdefer close(done)\n\t\tout, err := cmd.CombinedOutput()\n\t\tif err != nil && !isChannelClosed(gotReady) {\n\t\t\tt.Errorf(\"vault command failed: err: %v, out:\\n%s\\n\", err, string(out))\n\t\t}\n\t}()\n\n\tif err := waitForServiceReady(ctx, t, \"http://127.0.0.1:8300/v1/sys/health\"); err != nil {\n\t\tcancel()\n\t\t// Let the other goroutine print the log\n\t\t<-done\n\t\treturn nil, nil, errors.New(\"timed out waiting for vault to get ready\")\n\t}\n\n\tclose(gotReady)\n\treturn cancel, done, nil\n}\n\nfunc isChannelClosed(ch chan struct{}) bool {\n\tselect {\n\tcase <-ch:\n\t\treturn true\n\tdefault:\n\t\treturn false\n\t}\n}\n\nfunc waitForServiceReady(ctx context.Context, t *testing.T, address string) error {\n\tctx, cancel := context.WithTimeout(ctx, 30*time.Second)\n\tdefer cancel()\n\n\tvar errs []error\n\tfor ctx.Err() == nil {\n\t\trequest, err := http.NewRequestWithContext(ctx, http.MethodGet, address, nil)\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"failed to construct http request for vaulth healthcheck: %v\", err)\n\t\t}\n\t\tresponse, err := http.DefaultClient.Do(request)\n\t\tif response != nil && response.Body != nil {\n\t\t\tresponse.Body.Close()\n\t\t}\n\t\tif err == nil && response.StatusCode == http.StatusOK {\n\t\t\treturn nil\n\t\t}\n\t\terrs = append(errs, err)\n\t}\n\n\treturn fmt.Errorf(\"reached thirty second time out, errors when healthchecking: %w\", utilerrors.NewAggregate(errs))\n}\n"}}
[Trace - 17:58:42.493 PM] Received notification 'window/showMessage'.
Params: {"type":4,"message":"Loading packages..."}
[Trace - 17:58:42.494 PM] Received request 'workspace/configuration - (1)'.
Params: {"items":[{"scopeUri":"file:///home/alvaro/git/golang/src/github.com/openshift/ci-tools","section":"gopls"}]}
[Trace - 17:58:42.495 PM] Sending response 'workspace/configuration - (1)' in 0ms.
Result: [{"buildFlags":[],"hoverKind":"Structured"}]
[Trace - 17:58:42.613 PM] Received notification 'window/logMessage'.
Params: {"type":3,"message":"2021/02/25 17:58:42 go env for /home/alvaro/git/golang/src/github.com/openshift/ci-tools\n(root /home/alvaro/git/golang/src/github.com/openshift/ci-tools)\n(go version go version go1.16 linux/amd64)\n(valid build configuration = true)\n(build flags: [])\nGOSUMDB=off\nGO111MODULE=\nGONOSUMDB=\nGOPATH=/home/alvaro/git/golang\nGOPRIVATE=\nGOPROXY=direct\nGOFLAGS=\nGOMOD=/home/alvaro/git/golang/src/github.com/openshift/ci-tools/go.mod\nGOROOT=/usr/local/go\nGOMODCACHE=/home/alvaro/git/golang/pkg/mod\nGOCACHE=/home/alvaro/.gocache\nGOINSECURE=\nGONOPROXY=\n\n"}
[Trace - 17:58:44.320 PM] Sending notification 'textDocument/didChange'.
Params: {"contentChanges":[{"text":"package main\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n\t\"os\"\n\t\"os/exec\"\n\t\"reflect\"\n\t\"testing\"\n\t\"time\"\n\n\t\"github.com/google/go-cmp/cmp\"\n\t\"github.com/hashicorp/vault/api\"\n\t\"github.com/sirupsen/logrus\"\n\tutilerrors \"k8s.io/apimachinery/pkg/util/errors\"\n\n\t\"github.com/openshift/ci-tools/pkg/vaultclient\"\n)\n\nconst vaultTestingToken = \"jpuxZFWWFW7vM882GGX2aWOE\"\n\nfunc TestSecretCollectionManager(t *testing.T) {\n\tif _, err := exec.LookPath(\"vault\"); err != nil {\n\t\tif _, runningInCi := os.LookupEnv(\"CI\"); runningInCi {\n\t\t\tt.Fatalf(\"could not find vault in path: %v\", err)\n\t\t}\n\t\tt.Skip(\"could not find vault in path\")\n\t}\n\tif os.Getenv(\"CI\") != \"\" {\n\t\t// We need a writeable home\n\t\tos.Setenv(\"HOME\", \"/tmp\")\n\t}\n\tlogrus.SetLevel(logrus.TraceLevel)\n\n\tvaultCancel, vaultDone, err := startVault(t)\n\tif err != nil {\n\t\tt.Fatalf(\"failed to start vault: %v\", err)\n\t}\n\tt.Cleanup(func() {\n\t\tvaultCancel()\n\t\t<-vaultDone\n\t})\n\n\tclient, err := vaultclient.New(\"http://127.0.0.1:8300\", vaultTestingToken)\n\tif err != nil {\n\t\tt.Fatalf(\"failed to construct vault client: %v\", err)\n\t}\n\n\tif err := client.Sys().EnableAuthWithOptions(\"userpass\", &api.EnableAuthOptions{Type: \"userpass\"}); err != nil {\n\t\tt.Fatalf(\"failed to enable userpass auth: %v\", err)\n\t}\n\n\tmounts, err := client.ListAuthMounts()\n\tif err != nil {\n\t\tt.Fatalf(\"failed to list auth mounts: %v\", err)\n\t}\n\tvar mountAccessor string\n\tfor _, mount := range mounts {\n\t\tif mount.Type == \"userpass\" {\n\t\t\tmountAccessor = mount.Accessor\n\t\t\tbreak\n\t\t}\n\t}\n\tif mountAccessor == \"\" {\n\t\tt.Fatalf(\"failed to find userpass mount\")\n\t}\n\n\tfor _, user := range []string{\"user-1\", \"user-2\"} {\n\t\tif _, err := client.Logical().Write(fmt.Sprintf(\"/auth/userpass/users/%s\", user), map[string]interface{}{\"password\": \"irrelevant\"}); err != nil {\n\t\t\tt.Fatalf(\"failed to create userpass user %s: %v\", user, err)\n\t\t}\n\t\tidentity, err := client.CreateIdentity(user, []string{\"default\"})\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"failed to create identity for user %s: %v\", user, err)\n\t\t}\n\t\tif _, err := client.Logical().Write(\"identity/entity-alias\", map[string]interface{}{\n\t\t\t\"name\": user,\n\t\t\t\"canonical_id\": identity.ID,\n\t\t\t\"mount_accessor\": mountAccessor,\n\t\t}); err != nil {\n\t\t\tt.Fatalf(\"failed to create identity alias for user %s in mount_accessor %s: %v\", user, mountAccessor, err)\n\t\t}\n\t}\n\n\tctx, cancel := context.WithCancel(context.Background())\n\tdefer cancel()\n\tserver := server(client, \"secret/self-managed\")\n\tgo func() {\n\t\tif err := server.ListenAndServe(); err != nil && ctx.Err() == nil {\n\t\t\tcancel()\n\t\t\tt.Errorf(\"failed to start secret-collection-manager: %v\", err)\n\t\t}\n\t}()\n\n\tif err := waitForServiceReady(ctx, t, \"http://127.0.0.1:8080/healthz\"); err != nil {\n\t\tt.Fatalf(\"failed to wait for secret collection manager to become ready: %v\", err)\n\t}\n\tt.Cleanup(func() {\n\t\tif err := server.Close(); err != nil {\n\t\t\tt.Errorf(\"failed to close server: %v\", err)\n\t\t}\n\t})\n\n\ttestCases := []struct {\n\t\tname string\n\t\tuser string\n\t\trequest *http.Request\n\t\texpectedStatusCode int\n\t\texpectedBody string\n\t\texpectedVaultGroups []vaultclient.Group\n\t\texpectedVaultPolicies []string\n\t}{\n\t\t{\n\t\t\tname: \"Initial listing as user 1, no policies\",\n\t\t\tuser: \"user-1\",\n\t\t\trequest: mustNewRequest(http.MethodGet, \"http://127.0.0.1:8080/secretcollection\", nil),\n\t\t\texpectedStatusCode: 200,\n\t\t\texpectedVaultPolicies: []string{\"default\", \"root\"},\n\t\t},\n\t\t{\n\t\t\tname: \"User 1 creates policy\",\n\t\t\tuser: \"user-1\",\n\t\t\trequest: mustNewRequest(http.MethodPut, \"http://127.0.0.1:8080/secretcollection/mine-alone\", nil),\n\t\t\texpectedStatusCode: 200,\n\t\t\texpectedVaultGroups: []vaultclient.Group{{\n\t\t\t\tName: \"secret-collection-manager-managed-mine-alone\",\n\t\t\t\tPolicies: []string{\"secret-collection-manager-managed-mine-alone\"},\n\t\t\t\tMemberEntityIDs: []string{\"entity-0\"},\n\t\t\t\tMetadata: map[string]string{\"created-by-secret-collection-manager\": \"true\"},\n\t\t\t\tModifyIndex: 1,\n\t\t\t}},\n\t\t\texpectedVaultPolicies: []string{\"default\", \"secret-collection-manager-managed-mine-alone\", \"root\"},\n\t\t},\n\t}\n\n\t// These tests mutate state in vault, so they need to be executed serially\n\tfor _, tc := range testCases {\n\t\tt.Run(tc.name, func(t *testing.T) {\n\t\t\ttc.request.Header.Set(\"X-Forwarded-Email\", fmt.Sprintf(\"%s@unchecked.com\", tc.user))\n\t\t\tresponse, err := http.DefaultClient.Do(tc.request)\n\t\t\tif err != nil {\n\t\t\t\tt.Fatalf(\"request failed: %v\", err)\n\t\t\t}\n\t\t\tdefer response.Body.Close()\n\t\t\tif response.StatusCode != tc.expectedStatusCode {\n\t\t\t\tt.Fatalf(\"expected status code %d, got %d\", tc.expectedStatusCode, response.StatusCode)\n\t\t\t}\n\n\t\t\tbodyData, err := io.ReadAll(response.Body)\n\t\t\tif err != nil {\n\t\t\t\tt.Fatalf(\"failed to read response body: %v\", err)\n\t\t\t}\n\t\t\tif diff := cmp.Diff(tc.expectedBody, string(bodyData)); diff != \"\" {\n\t\t\t\tt.Errorf(\"expected body differs from actual: %s\", diff)\n\t\t\t}\n\n\t\t\tgroups, err := client.GetAllGroups()\n\t\t\tif err != nil {\n\t\t\t\tt.Fatalf(\"failed to get all groups: %v\", err)\n\t\t\t}\n\t\t\tfor idx := range groups {\n\t\t\t\tgroups[idx].ID = \"\"\n\t\t\t\tgroups[idx].CreationTime = nil\n\t\t\t\tgroups[idx].LastUpdateTime = nil\n\t\t\t\tgroups[idx].Type = \"\"\n\t\t\t\tgroups[idx].NamespaceID = \"\"\n\t\t\t\tif reflect.DeepEqual(groups[idx].Alias, emptyVaultAlias) {\n\t\t\t\t\t// The server doesn't use omitempty, so defining it as pointer with omitempty clientside is useless,\n\t\t\t\t\tgroups[idx].Alias = nil\n\t\t\t\t}\n\t\t\t\tfor memberIdIdx := range groups[idx].MemberEntityIDs {\n\t\t\t\t\tgroups[idx].MemberEntityIDs[memberIdIdx] = fmt.Sprintf(\"entity-%d\", memberIdIdx)\n\t\t\t\t}\n\t\t\t}\n\t\t\tif diff := cmp.Diff(tc.expectedVaultGroups, groups); diff != \"\" {\n\t\t\t\tt.Errorf(\"expectedVaultGroups differ from actual: %s\", diff)\n\t\t\t}\n\t\t\tpolicies, err := client.Sys().ListPolicies()\n\t\t\tif err != nil {\n\t\t\t\tt.Fatalf(\"failed to list policies: %v\", err)\n\t\t\t}\n\t\t\tif diff := cmp.Diff(tc.expectedVaultPolicies, policies); diff != \"\" {\n\t\t\t\tt.Errorf(\"expected vault policies differ from actual: %s\", diff)\n\t\t\t}\n\n\t\t})\n\t}\n}\n\nvar emptyVaultAlias = &vaultclient.Alias{}\n\nfunc mustNewRequest(method, url string, body io.Reader) *http.Request {\n\trequest, err := http.NewRequest(method, url, body)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\treturn request\n}\n\nfunc startVault(t *testing.T) (cancel context.CancelFunc, done chan struct{}, err error) {\n\tctx, cancel := context.WithCancel(context.Background())\n\n\tcmd := exec.CommandContext(ctx, \"vault\",\n\t\t\"server\",\n\t\t\"-dev\",\n\t\t\"--dev-listen-address=127.0.0.1:8300\",\n\t\tfmt.Sprintf(\"-dev-root-token-id=%s\", vaultTestingToken),\n\t)\n\n\tdone = make(chan struct{})\n\tgotReady := make(chan struct{})\n\tgo func() {\n\t\tdefer close(done)\n\t\tout, err := cmd.CombinedOutput()\n\t\tif err != nil && !isChannelClosed(gotReady) {\n\t\t\tt.Errorf(\"vault command failed: err: %v, out:\\n%s\\n\", err, string(out))\n\t\t}\n\t}()\n\n\tif err := waitForServiceReady(ctx, t, \"http://127.0.0.1:8300/v1/sys/health\"); err != nil {\n\t\tcancel()\n\t\t// Let the other goroutine print the log\n\t\t<-done\n\t\treturn nil, nil, errors.New(\"timed out waiting for vault to get ready\")\n\t}\n\n\tclose(gotReady)\n\treturn cancel, done, nil\n}\n\nfunc isChannelClosed(ch chan struct{}) bool {\n\tselect {\n\tcase <-ch:\n\t\treturn true\n\tdefault:\n\t\treturn false\n\t}\n}\n\nfunc waitForServiceReady(ctx context.Context, t *testing.T, address string) error {\n\tctx, cancel := context.WithTimeout(ctx, 30*time.Second)\n\tdefer cancel()\n\n\tvar errs []error\n\tfor ctx.Err() == nil {\n\t\trequest, err := http.NewRequestWithContext(ctx, http.MethodGet, address, nil)\n\t\tif err != nil {\n\t\t\tt.Fatalf(\"failed to construct http request for vaulth healthcheck: %v\", err)\n\t\t}\n\t\tresponse, err := http.DefaultClient.Do(request)\n\t\tif response != nil && response.Body != nil {\n\t\t\tresponse.Body.Close()\n\t\t}\n\t\tif err == nil && response.StatusCode == http.StatusOK {\n\t\t\treturn nil\n\t\t}\n\t\terrs = append(errs, err)\n\t}\n\n\treturn fmt.Errorf(\"reached thirty second time out, errors when healthchecking: %w\", utilerrors.NewAggregate(errs))\n}\n"}],"textDocument":{"uri":"file:///home/alvaro/git/golang/src/github.com/openshift/ci-tools/cmd/secret-collection-manager/main_test.go","version":3}}
[Trace - 17:58:44.323 PM] Sending request 'textDocument/definition - (2)'.
Params: {"textDocument":{"uri":"file:///home/alvaro/git/golang/src/github.com/openshift/ci-tools/cmd/secret-collection-manager/main_test.go"},"position":{"character":63,"line":51}}
[Trace - 17:58:46.190 PM] Received notification 'window/logMessage'.
Params: {"type":3,"message":"2021/02/25 17:58:46 go/packages.Load\n\tsnapshot=0\n\tdirectory=/home/alvaro/git/golang/src/github.com/openshift/ci-tools\n\tquery=[builtin github.com/openshift/ci-tools/...]\n\tpackages=292\n"}
[Trace - 17:58:46.793 PM] Received notification 'window/showMessage'.
Params: {"type":3,"message":"Finished loading packages."}
[Trace - 17:58:48.579 PM] Received request 'client/registerCapability - (2)'.
Params: {"registrations":[{"id":"workspace/didChangeConfiguration","method":"workspace/didChangeConfiguration"},{"id":"workspace/didChangeWorkspaceFolders","method":"workspace/didChangeWorkspaceFolders"}]}
[Trace - 17:58:48.580 PM] Sending response 'client/registerCapability - (2)' in 0ms.
Result:
[Trace - 17:58:48.752 PM] Received notification 'window/showMessage'.
Params: {"type":4,"message":"Loading packages..."}
[Trace - 17:58:48.752 PM] Received request 'workspace/configuration - (3)'.
Params: {"items":[{"scopeUri":"file:///home/alvaro/git/golang/src/github.com/openshift/ci-tools","section":"gopls"}]}
[Trace - 17:58:48.757 PM] Sending response 'workspace/configuration - (3)' in 4ms.
Result: [{"buildFlags":[],"hoverKind":"Structured"}]
[Trace - 17:58:48.965 PM] Received notification 'window/logMessage'.
Params: {"type":3,"message":"2021/02/25 17:58:48 go env for /home/alvaro/git/golang/src/github.com/openshift/ci-tools\n(root /home/alvaro/git/golang/src/github.com/openshift/ci-tools)\n(go version go version go1.16 linux/amd64)\n(valid build configuration = true)\n(build flags: [])\nGOPRIVATE=\nGO111MODULE=\nGOMODCACHE=/home/alvaro/git/golang/pkg/mod\nGOSUMDB=off\nGOMOD=/home/alvaro/git/golang/src/github.com/openshift/ci-tools/go.mod\nGONOSUMDB=\nGOPATH=/home/alvaro/git/golang\nGOPROXY=direct\nGOCACHE=/home/alvaro/.gocache\nGOINSECURE=\nGOFLAGS=\nGOROOT=/usr/local/go\nGONOPROXY=\n\n"}
[Trace - 17:58:54.179 PM] Received notification 'window/logMessage'.
Params: {"type":3,"message":"2021/02/25 17:58:54 go/packages.Load\n\tsnapshot=0\n\tdirectory=/home/alvaro/git/golang/src/github.com/openshift/ci-tools\n\tquery=[builtin github.com/openshift/ci-tools/...]\n\tpackages=292\n"}
[Trace - 17:58:54.646 PM] Received notification 'window/logMessage'.
Params: {"type":1,"message":"2021/02/25 17:58:54 creating workspace dir: mkdir /tmp/gopls-3392083.workspace: file exists\n"}
[Trace - 17:58:54.646 PM] Received notification 'window/showMessage'.
Params: {"type":3,"message":"Finished loading packages."}
[Trace - 17:58:54.809 PM] Sending request 'textDocument/definition - (3)'.
Params: {"textDocument":{"uri":"file:///home/alvaro/git/golang/src/github.com/openshift/ci-tools/cmd/secret-collection-manager/main_test.go"},"position":{"character":63,"line":51}}
[Trace - 17:58:55.288 PM] Received response 'textDocument/definition - (2)' in 10965ms.
Result: [{"uri":"file:///home/alvaro/git/golang/src/github.com/openshift/ci-tools/vendor/github.com/hashicorp/vault/api/sys_auth.go","range":{"start":{"line":76,"character":5},"end":{"line":76,"character":22}}}]
[Trace - 17:58:55.290 PM] Received response 'textDocument/definition - (3)' in 480ms.
Result: [{"uri":"file:///home/alvaro/git/golang/src/github.com/openshift/ci-tools/vendor/github.com/hashicorp/vault/api/sys_auth.go","range":{"start":{"line":76,"character":5},"end":{"line":76,"character":22}}}]
[Trace - 17:58:55.336 PM] Sending notification 'workspace/didChangeWorkspaceFolders'.
Params: {"event":{"added":[{"uri":"file:///home/alvaro/git/golang/src/github.com/openshift/ci-tools/vendor/github.com/hashicorp/vault/api","name":"/home/alvaro/git/golang/src/github.com/openshift/ci-tools/vendor/github.com/hashicorp/vault/api"}],"removed":[]}}
[Trace - 17:58:55.336 PM] Sending notification 'textDocument/didOpen'.
Params: {"textDocument":{"uri":"file:///home/alvaro/git/golang/src/github.com/openshift/ci-tools/vendor/github.com/hashicorp/vault/api/sys_auth.go","version":1,"languageId":"go","text":"package api\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"fmt\"\n\n\t\"github.com/mitchellh/mapstructure\"\n)\n\nfunc (c *Sys) ListAuth() (map[string]*AuthMount, error) {\n\tr := c.c.NewRequest(\"GET\", \"/v1/sys/auth\")\n\n\tctx, cancelFunc := context.WithCancel(context.Background())\n\tdefer cancelFunc()\n\tresp, err := c.c.RawRequestWithContext(ctx, r)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer resp.Body.Close()\n\n\tsecret, err := ParseSecret(resp.Body)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif secret == nil || secret.Data == nil {\n\t\treturn nil, errors.New(\"data from server response is empty\")\n\t}\n\n\tmounts := map[string]*AuthMount{}\n\terr = mapstructure.Decode(secret.Data, &mounts)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn mounts, nil\n}\n\n// DEPRECATED: Use EnableAuthWithOptions instead\nfunc (c *Sys) EnableAuth(path, authType, desc string) error {\n\treturn c.EnableAuthWithOptions(path, &EnableAuthOptions{\n\t\tType: authType,\n\t\tDescription: desc,\n\t})\n}\n\nfunc (c *Sys) EnableAuthWithOptions(path string, options *EnableAuthOptions) error {\n\tr := c.c.NewRequest(\"POST\", fmt.Sprintf(\"/v1/sys/auth/%s\", path))\n\tif err := r.SetJSONBody(options); err != nil {\n\t\treturn err\n\t}\n\n\tctx, cancelFunc := context.WithCancel(context.Background())\n\tdefer cancelFunc()\n\tresp, err := c.c.RawRequestWithContext(ctx, r)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer resp.Body.Close()\n\n\treturn nil\n}\n\nfunc (c *Sys) DisableAuth(path string) error {\n\tr := c.c.NewRequest(\"DELETE\", fmt.Sprintf(\"/v1/sys/auth/%s\", path))\n\n\tctx, cancelFunc := context.WithCancel(context.Background())\n\tdefer cancelFunc()\n\tresp, err := c.c.RawRequestWithContext(ctx, r)\n\tif err == nil {\n\t\tdefer resp.Body.Close()\n\t}\n\treturn err\n}\n\n// Rather than duplicate, we can use modern Go's type aliasing\ntype EnableAuthOptions = MountInput\ntype AuthConfigInput = MountConfigInput\ntype AuthMount = MountOutput\ntype AuthConfigOutput = MountConfigOutput\n"}}
[Trace - 17:58:55.342 PM] Received notification 'window/showMessage'.
Params: {"type":4,"message":"Loading packages..."}
[Trace - 17:58:55.342 PM] Received request 'workspace/configuration - (4)'.
Params: {"items":[{"scopeUri":"file:///home/alvaro/git/golang/src/github.com/openshift/ci-tools/vendor/github.com/hashicorp/vault/api","section":"gopls"}]}
[Trace - 17:58:55.366 PM] Sending response 'workspace/configuration - (4)' in 23ms.
Result: [{"buildFlags":[],"hoverKind":"Structured"}]
[Trace - 17:58:55.615 PM] Received notification 'window/logMessage'.
Params: {"type":3,"message":"2021/02/25 17:58:55 go env for /home/alvaro/git/golang/src/github.com/openshift/ci-tools/vendor/github.com/hashicorp/vault/api\n(root /home/alvaro/git/golang/src/github.com/openshift/ci-tools/vendor/github.com/hashicorp/vault/api)\n(go version go version go1.16 linux/amd64)\n(valid build configuration = true)\n(build flags: [])\nGOMOD=/home/alvaro/git/golang/src/github.com/openshift/ci-tools/go.mod\nGO111MODULE=\nGONOSUMDB=\nGOPRIVATE=\nGOPROXY=direct\nGOCACHE=/home/alvaro/.gocache\nGOFLAGS=\nGONOPROXY=\nGOROOT=/usr/local/go\nGOSUMDB=off\nGOPATH=/home/alvaro/git/golang\nGOINSECURE=\nGOMODCACHE=/home/alvaro/git/golang/pkg/mod\n\n"}
[Trace - 17:58:55.714 PM] Received notification 'window/logMessage'.
Params: {"type":1,"message":"2021/02/25 17:58:55 go/packages.Load: err: exit status 1: stderr: go: github.com/hashicorp/vault/sdk@v0.1.13 (replaced by ../sdk): reading ../sdk/go.mod: open /home/alvaro/git/golang/src/github.com/openshift/ci-tools/vendor/github.com/hashicorp/vault/sdk/go.mod: no such file or directory\n\n\tsnapshot=0\n\tdirectory=/home/alvaro/git/golang/src/github.com/openshift/ci-tools/vendor/github.com/hashicorp/vault/api\n\tquery=[builtin github.com/hashicorp/vault/api/...]\n\tpackages=0\n"}
[Trace - 17:58:55.714 PM] Received notification 'window/logMessage'.
Params: {"type":1,"message":"2021/02/25 17:58:55 initial workspace load failed: err: exit status 1: stderr: go: github.com/hashicorp/vault/sdk@v0.1.13 (replaced by ../sdk): reading ../sdk/go.mod: open /home/alvaro/git/golang/src/github.com/openshift/ci-tools/vendor/github.com/hashicorp/vault/sdk/go.mod: no such file or directory\n: packages.Load error\n"}
[Trace - 17:58:55.715 PM] Received notification 'window/logMessage'.
Params: {"type":1,"message":"2021/02/25 17:58:55 creating workspace dir: mkdir /tmp/gopls-3392083.workspace: file exists\n"}
[Trace - 17:58:55.715 PM] Received notification 'window/showMessage'.
Params: {"type":3,"message":"Finished loading packages."}
[Trace - 17:58:55.900 PM] Received notification 'window/logMessage'.
Params: {"type":1,"message":"2021/02/25 17:58:55 diagnosing go.mod: err: exit status 1: stderr: go: github.com/hashicorp/vault/sdk@v0.1.13 (replaced by ../sdk): reading ../sdk/go.mod: open /home/alvaro/git/golang/src/github.com/openshift/ci-tools/vendor/github.com/hashicorp/vault/sdk/go.mod: no such file or directory\n: packages.Load error\n"}
[Trace - 17:58:55.900 PM] Received notification 'window/showMessage'.
Params: {"type":4,"message":"err: exit status 1: stderr: go: github.com/hashicorp/vault/sdk@v0.1.13 (replaced by ../sdk): reading ../sdk/go.mod: open /home/alvaro/git/golang/src/github.com/openshift/ci-tools/vendor/github.com/hashicorp/vault/sdk/go.mod: no such file or directory : packages.Load error"}
[Trace - 17:58:55.900 PM] Received notification 'textDocument/publishDiagnostics'.
Params: {"uri":"file:///home/alvaro/git/golang/src/github.com/openshift/ci-tools/vendor/github.com/hashicorp/vault/api/go.mod","diagnostics":[{"range":{"start":{"line":0,"character":0},"end":{"line":0,"character":37}},"severity":1,"source":"go list","message":"err: exit status 1: stderr: go: github.com/hashicorp/vault/sdk@v0.1.13 (replaced by ../sdk): reading ../sdk/go.mod: open /home/alvaro/git/golang/src/github.com/openshift/ci-tools/vendor/github.com/hashicorp/vault/sdk/go.mod: no such file or directory\n: packages.Load error"}]}
[Trace - 17:58:55.901 PM] Received notification 'window/logMessage'.
Params: {"type":1,"message":"2021/02/25 17:58:55 errors loading workspace: err: exit status 1: stderr: go: github.com/hashicorp/vault/sdk@v0.1.13 (replaced by ../sdk): reading ../sdk/go.mod: open /home/alvaro/git/golang/src/github.com/openshift/ci-tools/vendor/github.com/hashicorp/vault/sdk/go.mod: no such file or directory\n: packages.Load error\n\tsnapshot=0\n\tdirectory=file:///home/alvaro/git/golang/src/github.com/openshift/ci-tools/vendor/github.com/hashicorp/vault/api\n"}
[Trace - 17:58:56.064 PM] Received notification 'window/logMessage'.
Params: {"type":1,"message":"2021/02/25 17:58:56 go/packages.Load: err: exit status 1: stderr: go: github.com/hashicorp/vault/sdk@v0.1.13 (replaced by ../sdk): reading ../sdk/go.mod: open /home/alvaro/git/golang/src/github.com/openshift/ci-tools/vendor/github.com/hashicorp/vault/sdk/go.mod: no such file or directory\n\n\tsnapshot=1\n\tdirectory=/home/alvaro/git/golang/src/github.com/openshift/ci-tools/vendor/github.com/hashicorp/vault/api\n\tquery=[file=/home/alvaro/git/golang/src/github.com/openshift/ci-tools/vendor/github.com/hashicorp/vault/api/sys_auth.go]\n\tpackages=0\n"}
[Trace - 17:58:56.519 PM] Received notification 'window/logMessage'.
Params: {"type":1,"message":"2021/02/25 17:58:56 go/packages.Load: err: exit status 1: stderr: go: github.com/hashicorp/vault/sdk@v0.1.13 (replaced by ../sdk): reading ../sdk/go.mod: open /home/alvaro/git/golang/src/github.com/openshift/ci-tools/vendor/github.com/hashicorp/vault/sdk/go.mod: no such file or directory\n\n\tsnapshot=1\n\tdirectory=/home/alvaro/git/golang/src/github.com/openshift/ci-tools/vendor/github.com/hashicorp/vault/api\n\tquery=[builtin github.com/hashicorp/vault/api/...]\n\tpackages=0\n"}
[Trace - 17:58:56.519 PM] Received notification 'window/logMessage'.
Params: {"type":1,"message":"2021/02/25 17:58:56 initial workspace load failed: err: exit status 1: stderr: go: github.com/hashicorp/vault/sdk@v0.1.13 (replaced by ../sdk): reading ../sdk/go.mod: open /home/alvaro/git/golang/src/github.com/openshift/ci-tools/vendor/github.com/hashicorp/vault/sdk/go.mod: no such file or directory\n: packages.Load error\n"}
[Trace - 17:58:56.658 PM] Received notification 'window/logMessage'.
Params: {"type":1,"message":"2021/02/25 17:58:56 go/packages.Load: err: exit status 1: stderr: go: github.com/hashicorp/vault/sdk@v0.1.13 (replaced by ../sdk): reading ../sdk/go.mod: open /home/alvaro/git/golang/src/github.com/openshift/ci-tools/vendor/github.com/hashicorp/vault/sdk/go.mod: no such file or directory\n\n\tsnapshot=1\n\tdirectory=/home/alvaro/git/golang/src/github.com/openshift/ci-tools/vendor/github.com/hashicorp/vault/api\n\tquery=[file=/home/alvaro/git/golang/src/github.com/openshift/ci-tools/vendor/github.com/hashicorp/vault/api/sys_auth.go]\n\tpackages=0\n"}
[Trace - 17:58:56.658 PM] Received notification 'window/logMessage'.
Params: {"type":1,"message":"2021/02/25 17:58:56 reloadOrphanedFiles: failed to load: err: exit status 1: stderr: go: github.com/hashicorp/vault/sdk@v0.1.13 (replaced by ../sdk): reading ../sdk/go.mod: open /home/alvaro/git/golang/src/github.com/openshift/ci-tools/vendor/github.com/hashicorp/vault/sdk/go.mod: no such file or directory\n: packages.Load error\n\tquery=[file:///home/alvaro/git/golang/src/github.com/openshift/ci-tools/vendor/github.com/hashicorp/vault/api/sys_auth.go]\n"}
[Trace - 17:58:56.659 PM] Received notification 'window/logMessage'.
Params: {"type":1,"message":"2021/02/25 17:58:56 diagnosing go.mod: err: exit status 1: stderr: go: github.com/hashicorp/vault/sdk@v0.1.13 (replaced by ../sdk): reading ../sdk/go.mod: open /home/alvaro/git/golang/src/github.com/openshift/ci-tools/vendor/github.com/hashicorp/vault/sdk/go.mod: no such file or directory\n: packages.Load error\n"}
[Trace - 17:58:56.659 PM] Received notification 'window/logMessage'.
Params: {"type":1,"message":"2021/02/25 17:58:56 errors loading workspace: err: exit status 1: stderr: go: github.com/hashicorp/vault/sdk@v0.1.13 (replaced by ../sdk): reading ../sdk/go.mod: open /home/alvaro/git/golang/src/github.com/openshift/ci-tools/vendor/github.com/hashicorp/vault/sdk/go.mod: no such file or directory\n: packages.Load error\n\tsnapshot=1\n\tdirectory=file:///home/alvaro/git/golang/src/github.com/openshift/ci-tools/vendor/github.com/hashicorp/vault/api\n"}
[Trace - 17:58:56.805 PM] Sending notification 'textDocument/didChange'.
Params: {"contentChanges":[{"text":"package api\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"fmt\"\n\n\t\"github.com/mitchellh/mapstructure\"\n)\n\nfunc (c *Sys) ListAuth() (map[string]*AuthMount, error) {\n\tr := c.c.NewRequest(\"GET\", \"/v1/sys/auth\")\n\n\tctx, cancelFunc := context.WithCancel(context.Background())\n\tdefer cancelFunc()\n\tresp, err := c.c.RawRequestWithContext(ctx, r)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer resp.Body.Close()\n\n\tsecret, err := ParseSecret(resp.Body)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tif secret == nil || secret.Data == nil {\n\t\treturn nil, errors.New(\"data from server response is empty\")\n\t}\n\n\tmounts := map[string]*AuthMount{}\n\terr = mapstructure.Decode(secret.Data, &mounts)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn mounts, nil\n}\n\n// DEPRECATED: Use EnableAuthWithOptions instead\nfunc (c *Sys) EnableAuth(path, authType, desc string) error {\n\treturn c.EnableAuthWithOptions(path, &EnableAuthOptions{\n\t\tType: authType,\n\t\tDescription: desc,\n\t})\n}\n\nfunc (c *Sys) EnableAuthWithOptions(path string, options *EnableAuthOptions) error {\n\tr := c.c.NewRequest(\"POST\", fmt.Sprintf(\"/v1/sys/auth/%s\", path))\n\tif err := r.SetJSONBody(options); err != nil {\n\t\treturn err\n\t}\n\n\tctx, cancelFunc := context.WithCancel(context.Background())\n\tdefer cancelFunc()\n\tresp, err := c.c.RawRequestWithContext(ctx, r)\n\tif err != nil {\n\t\treturn err\n\t}\n\tdefer resp.Body.Close()\n\n\treturn nil\n}\n\nfunc (c *Sys) DisableAuth(path string) error {\n\tr := c.c.NewRequest(\"DELETE\", fmt.Sprintf(\"/v1/sys/auth/%s\", path))\n\n\tctx, cancelFunc := context.WithCancel(context.Background())\n\tdefer cancelFunc()\n\tresp, err := c.c.RawRequestWithContext(ctx, r)\n\tif err == nil {\n\t\tdefer resp.Body.Close()\n\t}\n\treturn err\n}\n\n// Rather than duplicate, we can use modern Go's type aliasing\ntype EnableAuthOptions = MountInput\ntype AuthConfigInput = MountConfigInput\ntype AuthMount = MountOutput\ntype AuthConfigOutput = MountConfigOutput\n"}],"textDocument":{"uri":"file:///home/alvaro/git/golang/src/github.com/openshift/ci-tools/vendor/github.com/hashicorp/vault/api/sys_auth.go","version":2}}
[Trace - 17:58:56.805 PM] Sending request 'textDocument/definition - (4)'.
Params: {"textDocument":{"uri":"file:///home/alvaro/git/golang/src/github.com/openshift/ci-tools/vendor/github.com/hashicorp/vault/api/sys_auth.go"},"position":{"character":25,"line":76}}
[Trace - 17:58:57.280 PM] Received notification 'window/logMessage'.
Params: {"type":1,"message":"2021/02/25 17:58:57 go/packages.Load: err: exit status 1: stderr: go: github.com/hashicorp/vault/sdk@v0.1.13 (replaced by ../sdk): reading ../sdk/go.mod: open /home/alvaro/git/golang/src/github.com/openshift/ci-tools/vendor/github.com/hashicorp/vault/sdk/go.mod: no such file or directory\n\n\tsnapshot=2\n\tdirectory=/home/alvaro/git/golang/src/github.com/openshift/ci-tools/vendor/github.com/hashicorp/vault/api\n\tquery=[file=/home/alvaro/git/golang/src/github.com/openshift/ci-tools/vendor/github.com/hashicorp/vault/api/sys_auth.go]\n\tpackages=0\n"}
[Error - Received] 17:58:57.347 PM #4 err: exit status 1: stderr: go: github.com/hashicorp/vault/sdk@v0.1.13 (replaced by ../sdk): reading ../sdk/go.mod: open /home/alvaro/git/golang/src/github.com/openshift/ci-tools/vendor/github.com/hashicorp/vault/sdk/go.mod: no such file or directory
: packages.Load error
[Trace - 17:58:57.348 PM] Received notification 'window/logMessage'.
Params: {"type":1,"message":"2021/02/25 17:58:57 go/packages.Load: err: exit status 1: stderr: go: github.com/hashicorp/vault/sdk@v0.1.13 (replaced by ../sdk): reading ../sdk/go.mod: open /home/alvaro/git/golang/src/github.com/openshift/ci-tools/vendor/github.com/hashicorp/vault/sdk/go.mod: no such file or directory\n\n\tsnapshot=2\n\tdirectory=/home/alvaro/git/golang/src/github.com/openshift/ci-tools/vendor/github.com/hashicorp/vault/api\n\tquery=[file=/home/alvaro/git/golang/src/github.com/openshift/ci-tools/vendor/github.com/hashicorp/vault/api/sys_auth.go]\n\tpackages=0\n"}
[Trace - 17:58:57.677 PM] Received notification 'window/logMessage'.
Params: {"type":1,"message":"2021/02/25 17:58:57 go/packages.Load: err: exit status 1: stderr: go: github.com/hashicorp/vault/sdk@v0.1.13 (replaced by ../sdk): reading ../sdk/go.mod: open /home/alvaro/git/golang/src/github.com/openshift/ci-tools/vendor/github.com/hashicorp/vault/sdk/go.mod: no such file or directory\n\n\tsnapshot=2\n\tdirectory=/home/alvaro/git/golang/src/github.com/openshift/ci-tools/vendor/github.com/hashicorp/vault/api\n\tquery=[builtin github.com/hashicorp/vault/api/...]\n\tpackages=0\n"}
[Trace - 17:58:57.677 PM] Received notification 'window/logMessage'.
Params: {"type":1,"message":"2021/02/25 17:58:57 initial workspace load failed: err: exit status 1: stderr: go: github.com/hashicorp/vault/sdk@v0.1.13 (replaced by ../sdk): reading ../sdk/go.mod: open /home/alvaro/git/golang/src/github.com/openshift/ci-tools/vendor/github.com/hashicorp/vault/sdk/go.mod: no such file or directory\n: packages.Load error\n"}
[Trace - 17:58:57.752 PM] Received notification 'window/logMessage'.
Params: {"type":1,"message":"2021/02/25 17:58:57 go/packages.Load: err: exit status 1: stderr: go: github.com/hashicorp/vault/sdk@v0.1.13 (replaced by ../sdk): reading ../sdk/go.mod: open /home/alvaro/git/golang/src/github.com/openshift/ci-tools/vendor/github.com/hashicorp/vault/sdk/go.mod: no such file or directory\n\n\tsnapshot=2\n\tdirectory=/home/alvaro/git/golang/src/github.com/openshift/ci-tools/vendor/github.com/hashicorp/vault/api\n\tquery=[file=/home/alvaro/git/golang/src/github.com/openshift/ci-tools/vendor/github.com/hashicorp/vault/api/sys_auth.go]\n\tpackages=0\n"}
[Trace - 17:58:57.752 PM] Received notification 'window/logMessage'.
Params: {"type":1,"message":"2021/02/25 17:58:57 reloadOrphanedFiles: failed to load: err: exit status 1: stderr: go: github.com/hashicorp/vault/sdk@v0.1.13 (replaced by ../sdk): reading ../sdk/go.mod: open /home/alvaro/git/golang/src/github.com/openshift/ci-tools/vendor/github.com/hashicorp/vault/sdk/go.mod: no such file or directory\n: packages.Load error\n\tquery=[file:///home/alvaro/git/golang/src/github.com/openshift/ci-tools/vendor/github.com/hashicorp/vault/api/sys_auth.go]\n"}
[Trace - 17:58:57.752 PM] Received notification 'window/logMessage'.
Params: {"type":1,"message":"2021/02/25 17:58:57 diagnosing go.mod: err: exit status 1: stderr: go: github.com/hashicorp/vault/sdk@v0.1.13 (replaced by ../sdk): reading ../sdk/go.mod: open /home/alvaro/git/golang/src/github.com/openshift/ci-tools/vendor/github.com/hashicorp/vault/sdk/go.mod: no such file or directory\n: packages.Load error\n"}
[Trace - 17:58:57.752 PM] Received notification 'window/logMessage'.
Params: {"type":1,"message":"2021/02/25 17:58:57 errors loading workspace: err: exit status 1: stderr: go: github.com/hashicorp/vault/sdk@v0.1.13 (replaced by ../sdk): reading ../sdk/go.mod: open /home/alvaro/git/golang/src/github.com/openshift/ci-tools/vendor/github.com/hashicorp/vault/sdk/go.mod: no such file or directory\n: packages.Load error\n\tsnapshot=2\n\tdirectory=file:///home/alvaro/git/golang/src/github.com/openshift/ci-tools/vendor/github.com/hashicorp/vault/api\n"}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment