Compare commits

...

27 Commits

Author SHA1 Message Date
shreyas-goenka e2f1a4a22f
Merge 48f3bfb008 into 8d849fe868 2025-02-11 10:48:12 +00:00
Denis Bilenko 8d849fe868
acc: Disable custom server on CLOUD_ENV (#2332)
We're not using local server when CLOUD_ENV is enabled, no need to set
up a custom one.
2025-02-11 10:37:48 +00:00
Denis Bilenko f2096eddcc
acc: Do not show all replacements on every failure (#2331)
## Changes
- Only print replacements if VERBOSE_TEST flag is set.
- This is set on CI but not when you do "go test" or "make test".

Note, env var is used, so that it can be set in Makefile.

## Tests
Manually.
2025-02-11 09:38:53 +00:00
Shreyas Goenka 48f3bfb008
pretty 2025-02-10 14:36:52 +01:00
Shreyas Goenka 2d449c3725
Merge remote-tracking branch 'origin' into auth-validate 2025-02-10 14:36:15 +01:00
Shreyas Goenka c0666e5115
address comments 2025-02-10 14:36:08 +01:00
Shreyas Goenka 7e141f5184
Merge remote-tracking branch 'origin' into auth-validate 2025-02-10 14:26:23 +01:00
Shreyas Goenka 44ed605a40
update main 2025-02-10 13:32:32 +01:00
Shreyas Goenka 440aafc0e5
Merge remote-tracking branch 'origin' into auth-validate 2025-02-10 13:28:55 +01:00
Shreyas Goenka 45ea71c442
- 2025-02-05 15:11:55 +01:00
Shreyas Goenka f9c450591c
- 2025-02-05 15:06:38 +01:00
Shreyas Goenka ffa8e6b01c
- 2025-02-05 15:05:49 +01:00
Shreyas Goenka 8399f0a8ca
- 2025-02-05 15:03:49 +01:00
Shreyas Goenka 61b2e22f5e
- 2025-02-05 15:03:27 +01:00
Shreyas Goenka 5a1f36e07d
- 2025-02-05 13:16:42 +01:00
Shreyas Goenka bbc23ad0f7
- 2025-02-05 13:14:10 +01:00
Shreyas Goenka 2253eb0590
merge 2025-02-05 13:13:14 +01:00
Shreyas Goenka 22fa6488fd
Merge remote-tracking branch 'origin' into auth-validate 2025-02-04 17:34:33 +01:00
Shreyas Goenka a40dc8cf3c
cleanup: 2025-02-03 20:05:30 +01:00
Shreyas Goenka 6fabd756f0
- 2025-02-03 20:01:06 +01:00
Shreyas Goenka eb8e9854d4
-gs 2025-02-03 20:01:01 +01:00
Shreyas Goenka b66bfb2c93
- 2025-02-03 19:50:16 +01:00
Shreyas Goenka b076b750f1
fix 2025-02-03 19:49:38 +01:00
Shreyas Goenka 5e9d63280a
- 2025-02-03 19:33:02 +01:00
Shreyas Goenka 9c0efb6212
- 2025-02-03 19:26:19 +01:00
Shreyas Goenka 6abfe52081
- 2025-02-03 19:25:15 +01:00
Shreyas Goenka a7e785d0e8
Add acceptance tests for auth resolution 2025-02-03 19:24:41 +01:00
14 changed files with 152 additions and 7 deletions

View File

@ -28,7 +28,7 @@ test:
cover:
rm -fr ./acceptance/build/cover/
CLI_GOCOVERDIR=build/cover ${GOTESTSUM_CMD} -- -coverprofile=coverage.txt ${PACKAGES}
VERBOSE_TEST=1 CLI_GOCOVERDIR=build/cover ${GOTESTSUM_CMD} -- -coverprofile=coverage.txt ${PACKAGES}
rm -fr ./acceptance/build/cover-merged/
mkdir -p acceptance/build/cover-merged/
go tool covdata merge -i $$(printf '%s,' acceptance/build/cover/* | sed 's/,$$//') -o acceptance/build/cover-merged/
@ -61,6 +61,6 @@ integration: vendor
$(INTEGRATION)
integration-short: vendor
$(INTEGRATION) -short
VERBOSE_TEST=1 $(INTEGRATION) -short
.PHONY: lint tidy lintcheck fmt test cover showcover build snapshot vendor schema integration integration-short acc-cover acc-showcover docs

View File

@ -30,8 +30,9 @@ import (
)
var (
KeepTmp bool
NoRepl bool
KeepTmp bool
NoRepl bool
VerboseTest bool = os.Getenv("VERBOSE_TEST") != ""
)
// In order to debug CLI running under acceptance test, set this to full subtest name, e.g. "bundle/variables/empty"
@ -261,7 +262,7 @@ func runTest(t *testing.T, dir, coverDir string, repls testdiff.ReplacementsCont
// 2. The test is configured to record requests and assert on them. We need
// a duplicate of the default server to record requests because the default
// server otherwise is a shared resource.
if len(config.Server) > 0 || config.RecordRequests {
if cloudEnv == "" && (len(config.Server) > 0 || config.RecordRequests) {
server = testserver.New(t)
server.RecordRequests = config.RecordRequests
server.IncludeRequestHeaders = config.IncludeRequestHeaders
@ -412,7 +413,7 @@ func doComparison(t *testing.T, repls testdiff.ReplacementsContext, dirRef, dirN
testutil.WriteFile(t, pathRef, valueNew)
}
if !equal && printedRepls != nil && !*printedRepls {
if VerboseTest && !equal && printedRepls != nil && !*printedRepls {
*printedRepls = true
var items []string
for _, item := range repls.Repls {

View File

@ -0,0 +1,13 @@
{
"headers": {
"Authorization": [
"Basic dXNlcm5hbWU6cGFzc3dvcmQ="
],
"User-Agent": [
"cli/[DEV_VERSION] databricks-sdk-go/[SDK_VERSION] go/[GO_VERSION] os/[OS] cmd/current-user_me cmd-exec-id/[UUID] auth/basic"
]
},
"method": "GET",
"path": "/api/2.0/preview/scim/v2/Me",
"body": ""
}

View File

@ -0,0 +1,4 @@
{
"id":"[USERID]",
"userName":"[USERNAME]"
}

View File

@ -0,0 +1,9 @@
# Unset the token which is configured by default
# in acceptance tests
export DATABRICKS_TOKEN=""
# "username:password" in base64 is dXNlcm5hbWU6cGFzc3dvcmQ=, expect to see this in Authorization header
export DATABRICKS_USERNAME=username
export DATABRICKS_PASSWORD=password
$CLI current-user me

View File

@ -0,0 +1,36 @@
{
"headers": {
"User-Agent": [
"cli/[DEV_VERSION] databricks-sdk-go/[SDK_VERSION] go/[GO_VERSION] os/[OS]"
]
},
"method": "GET",
"path": "/oidc/.well-known/oauth-authorization-server",
"body": ""
}
{
"headers": {
"Authorization": [
"Basic Y2xpZW50X2lkOmNsaWVudF9zZWNyZXQ="
],
"User-Agent": [
"cli/[DEV_VERSION] databricks-sdk-go/[SDK_VERSION] go/[GO_VERSION] os/[OS]"
]
},
"method": "POST",
"path": "/oidc/v1/token",
"body": "grant_type=client_credentials\u0026scope=all-apis"
}
{
"headers": {
"Authorization": [
"Bearer oauth-token"
],
"User-Agent": [
"cli/[DEV_VERSION] databricks-sdk-go/[SDK_VERSION] go/[GO_VERSION] os/[OS] cmd/current-user_me cmd-exec-id/[UUID] auth/oauth-m2m"
]
},
"method": "GET",
"path": "/api/2.0/preview/scim/v2/Me",
"body": ""
}

View File

@ -0,0 +1,4 @@
{
"id":"[USERID]",
"userName":"[USERNAME]"
}

View File

@ -0,0 +1,10 @@
# Unset the token which is configured by default
# in acceptance tests
export DATABRICKS_TOKEN=""
# "client_id:client_secret" in base64 is Y2xpZW50X2lkOmNsaWVudF9zZWNyZXQ=, expect to
# see this in Authorization header
export DATABRICKS_CLIENT_ID=client_id
export DATABRICKS_CLIENT_SECRET=client_secret
$CLI current-user me

View File

@ -0,0 +1,13 @@
{
"headers": {
"Authorization": [
"Bearer dapi1234"
],
"User-Agent": [
"cli/[DEV_VERSION] databricks-sdk-go/[SDK_VERSION] go/[GO_VERSION] os/[OS] cmd/current-user_me cmd-exec-id/[UUID] auth/pat"
]
},
"method": "GET",
"path": "/api/2.0/preview/scim/v2/Me",
"body": ""
}

View File

@ -0,0 +1,4 @@
{
"id":"[USERID]",
"userName":"[USERNAME]"
}

View File

@ -0,0 +1,3 @@
export DATABRICKS_TOKEN=dapi1234
$CLI current-user me

View File

@ -0,0 +1,20 @@
LocalOnly = true
RecordRequests = true
IncludeRequestHeaders = ["Authorization", "User-Agent"]
[[Repls]]
Old = '(linux|darwin|windows)'
New = '[OS]'
[[Repls]]
Old = " upstream/[A-Za-z0-9.-]+"
New = ""
[[Repls]]
Old = " upstream-version/[A-Za-z0-9.-]+"
New = ""
[[Repls]]
Old = " cicd/[A-Za-z0-9.-]+"
New = ""

View File

@ -161,6 +161,22 @@ func AddHandlers(server *testserver.Server) {
server.Handle("GET /api/2.1/jobs/list", func(fakeWorkspace *testserver.FakeWorkspace, r *http.Request) (any, int) {
return fakeWorkspace.JobsList()
})
server.Handle("GET /oidc/.well-known/oauth-authorization-server", func(fakeWorkspace *testserver.FakeWorkspace, r *http.Request) (any, int) {
return map[string]string{
"authorization_endpoint": server.URL + "oidc/v1/authorize",
"token_endpoint": server.URL + "/oidc/v1/token",
}, http.StatusOK
})
server.Handle("POST /oidc/v1/token", func(fakeWorkspace *testserver.FakeWorkspace, r *http.Request) (any, int) {
return map[string]string{
"access_token": "oauth-token",
"expires_in": "3600",
"scope": "all-apis",
"token_type": "Bearer",
}, http.StatusOK
})
}
func internalError(err error) (any, int) {

View File

@ -119,11 +119,23 @@ func (s *Server) Handle(pattern string, handler HandlerFunc) {
}
}
var reqBody any
if json.Valid(body) {
// If the request body is a valid JSON, typecast it to json.RawMessage.
// This way json.Marshal will ignore the body and serialize it
// as is, which is what we want because the body is already a JSON.
reqBody = json.RawMessage(body)
} else {
// JSON marshal encodes []byte to base64. Typecase it to string
// to avoid this.
reqBody = string(body)
}
s.Requests = append(s.Requests, Request{
Headers: headers,
Method: r.Method,
Path: r.URL.Path,
Body: json.RawMessage(body),
Body: reqBody,
})
}