2025-01-08 12:41:08 +00:00
|
|
|
package acceptance_test
|
|
|
|
|
|
|
|
import (
|
2025-02-07 10:26:20 +00:00
|
|
|
"bytes"
|
|
|
|
"encoding/json"
|
|
|
|
"fmt"
|
2025-01-08 12:41:08 +00:00
|
|
|
"net/http"
|
|
|
|
|
2025-01-14 18:23:34 +00:00
|
|
|
"github.com/databricks/databricks-sdk-go/service/catalog"
|
2025-01-08 12:41:08 +00:00
|
|
|
"github.com/databricks/databricks-sdk-go/service/iam"
|
2025-02-07 10:26:20 +00:00
|
|
|
|
|
|
|
"github.com/databricks/databricks-sdk-go/service/compute"
|
|
|
|
"github.com/databricks/databricks-sdk-go/service/jobs"
|
|
|
|
|
|
|
|
"github.com/databricks/cli/libs/testserver"
|
2025-01-08 12:41:08 +00:00
|
|
|
"github.com/databricks/databricks-sdk-go/service/workspace"
|
|
|
|
)
|
|
|
|
|
2025-01-29 10:42:21 +00:00
|
|
|
func AddHandlers(server *testserver.Server) {
|
2025-02-07 10:26:20 +00:00
|
|
|
server.Handle("GET /api/2.0/policies/clusters/list", func(fakeWorkspace *testserver.FakeWorkspace, r *http.Request) (any, int) {
|
2025-01-08 12:41:08 +00:00
|
|
|
return compute.ListPoliciesResponse{
|
|
|
|
Policies: []compute.Policy{
|
|
|
|
{
|
|
|
|
PolicyId: "5678",
|
|
|
|
Name: "wrong-cluster-policy",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
PolicyId: "9876",
|
|
|
|
Name: "some-test-cluster-policy",
|
|
|
|
},
|
|
|
|
},
|
2025-02-04 16:38:11 +00:00
|
|
|
}, http.StatusOK
|
2025-01-08 12:41:08 +00:00
|
|
|
})
|
|
|
|
|
2025-02-07 10:26:20 +00:00
|
|
|
server.Handle("GET /api/2.0/instance-pools/list", func(fakeWorkspace *testserver.FakeWorkspace, r *http.Request) (any, int) {
|
2025-01-08 12:41:08 +00:00
|
|
|
return compute.ListInstancePools{
|
|
|
|
InstancePools: []compute.InstancePoolAndStats{
|
|
|
|
{
|
|
|
|
InstancePoolName: "some-test-instance-pool",
|
|
|
|
InstancePoolId: "1234",
|
|
|
|
},
|
|
|
|
},
|
2025-02-04 16:38:11 +00:00
|
|
|
}, http.StatusOK
|
2025-01-08 12:41:08 +00:00
|
|
|
})
|
|
|
|
|
2025-02-07 10:26:20 +00:00
|
|
|
server.Handle("GET /api/2.1/clusters/list", func(fakeWorkspace *testserver.FakeWorkspace, r *http.Request) (any, int) {
|
2025-01-08 12:41:08 +00:00
|
|
|
return compute.ListClustersResponse{
|
|
|
|
Clusters: []compute.ClusterDetails{
|
|
|
|
{
|
|
|
|
ClusterName: "some-test-cluster",
|
|
|
|
ClusterId: "4321",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
ClusterName: "some-other-cluster",
|
|
|
|
ClusterId: "9876",
|
|
|
|
},
|
|
|
|
},
|
2025-02-04 16:38:11 +00:00
|
|
|
}, http.StatusOK
|
2025-01-08 12:41:08 +00:00
|
|
|
})
|
|
|
|
|
2025-02-07 10:26:20 +00:00
|
|
|
server.Handle("GET /api/2.0/preview/scim/v2/Me", func(fakeWorkspace *testserver.FakeWorkspace, r *http.Request) (any, int) {
|
2025-01-08 12:41:08 +00:00
|
|
|
return iam.User{
|
2025-01-29 17:35:03 +00:00
|
|
|
Id: "1000012345",
|
2025-01-08 12:41:08 +00:00
|
|
|
UserName: "tester@databricks.com",
|
2025-02-04 16:38:11 +00:00
|
|
|
}, http.StatusOK
|
2025-01-08 12:41:08 +00:00
|
|
|
})
|
|
|
|
|
2025-02-07 10:26:20 +00:00
|
|
|
server.Handle("GET /api/2.0/workspace/get-status", func(fakeWorkspace *testserver.FakeWorkspace, r *http.Request) (any, int) {
|
|
|
|
path := r.URL.Query().Get("path")
|
|
|
|
|
|
|
|
return fakeWorkspace.WorkspaceGetStatus(path)
|
|
|
|
})
|
|
|
|
|
|
|
|
server.Handle("POST /api/2.0/workspace/mkdirs", func(fakeWorkspace *testserver.FakeWorkspace, r *http.Request) (any, int) {
|
|
|
|
request := workspace.Mkdirs{}
|
|
|
|
decoder := json.NewDecoder(r.Body)
|
|
|
|
|
|
|
|
err := decoder.Decode(&request)
|
|
|
|
if err != nil {
|
|
|
|
return internalError(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
return fakeWorkspace.WorkspaceMkdirs(request)
|
|
|
|
})
|
|
|
|
|
|
|
|
server.Handle("GET /api/2.0/workspace/export", func(fakeWorkspace *testserver.FakeWorkspace, r *http.Request) (any, int) {
|
|
|
|
path := r.URL.Query().Get("path")
|
|
|
|
|
|
|
|
return fakeWorkspace.WorkspaceExport(path)
|
|
|
|
})
|
|
|
|
|
|
|
|
server.Handle("POST /api/2.0/workspace/delete", func(fakeWorkspace *testserver.FakeWorkspace, r *http.Request) (any, int) {
|
|
|
|
path := r.URL.Query().Get("path")
|
|
|
|
recursiveStr := r.URL.Query().Get("recursive")
|
|
|
|
var recursive bool
|
|
|
|
|
|
|
|
if recursiveStr == "true" {
|
|
|
|
recursive = true
|
|
|
|
} else {
|
|
|
|
recursive = false
|
|
|
|
}
|
|
|
|
|
|
|
|
return fakeWorkspace.WorkspaceDelete(path, recursive)
|
2025-01-08 12:41:08 +00:00
|
|
|
})
|
2025-01-14 18:23:34 +00:00
|
|
|
|
2025-02-07 10:26:20 +00:00
|
|
|
server.Handle("POST /api/2.0/workspace-files/import-file/{path}", func(fakeWorkspace *testserver.FakeWorkspace, r *http.Request) (any, int) {
|
|
|
|
path := r.PathValue("path")
|
|
|
|
|
|
|
|
body := new(bytes.Buffer)
|
|
|
|
_, err := body.ReadFrom(r.Body)
|
|
|
|
if err != nil {
|
|
|
|
return internalError(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
return fakeWorkspace.WorkspaceFilesImportFile(path, body.Bytes())
|
|
|
|
})
|
|
|
|
|
|
|
|
server.Handle("GET /api/2.1/unity-catalog/current-metastore-assignment", func(fakeWorkspace *testserver.FakeWorkspace, r *http.Request) (any, int) {
|
2025-01-14 18:23:34 +00:00
|
|
|
return catalog.MetastoreAssignment{
|
|
|
|
DefaultCatalogName: "main",
|
2025-02-04 16:38:11 +00:00
|
|
|
}, http.StatusOK
|
2025-01-14 18:23:34 +00:00
|
|
|
})
|
|
|
|
|
2025-02-07 10:26:20 +00:00
|
|
|
server.Handle("GET /api/2.0/permissions/directories/{objectId}", func(fakeWorkspace *testserver.FakeWorkspace, r *http.Request) (any, int) {
|
|
|
|
objectId := r.PathValue("objectId")
|
|
|
|
|
2025-01-14 18:23:34 +00:00
|
|
|
return workspace.WorkspaceObjectPermissions{
|
2025-02-07 10:26:20 +00:00
|
|
|
ObjectId: objectId,
|
2025-01-14 18:23:34 +00:00
|
|
|
ObjectType: "DIRECTORY",
|
|
|
|
AccessControlList: []workspace.WorkspaceObjectAccessControlResponse{
|
|
|
|
{
|
|
|
|
UserName: "tester@databricks.com",
|
|
|
|
AllPermissions: []workspace.WorkspaceObjectPermission{
|
|
|
|
{
|
|
|
|
PermissionLevel: "CAN_MANAGE",
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
2025-02-04 16:38:11 +00:00
|
|
|
}, http.StatusOK
|
2025-01-14 18:23:34 +00:00
|
|
|
})
|
2025-01-27 15:28:33 +00:00
|
|
|
|
2025-02-07 10:26:20 +00:00
|
|
|
server.Handle("POST /api/2.1/jobs/create", func(fakeWorkspace *testserver.FakeWorkspace, r *http.Request) (any, int) {
|
|
|
|
request := jobs.CreateJob{}
|
|
|
|
decoder := json.NewDecoder(r.Body)
|
|
|
|
|
|
|
|
err := decoder.Decode(&request)
|
|
|
|
if err != nil {
|
|
|
|
return internalError(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
return fakeWorkspace.JobsCreate(request)
|
|
|
|
})
|
|
|
|
|
|
|
|
server.Handle("GET /api/2.1/jobs/get", func(fakeWorkspace *testserver.FakeWorkspace, r *http.Request) (any, int) {
|
|
|
|
jobId := r.URL.Query().Get("job_id")
|
|
|
|
|
|
|
|
return fakeWorkspace.JobsGet(jobId)
|
2025-01-27 15:28:33 +00:00
|
|
|
})
|
2025-02-07 10:26:20 +00:00
|
|
|
|
|
|
|
server.Handle("GET /api/2.1/jobs/list", func(fakeWorkspace *testserver.FakeWorkspace, r *http.Request) (any, int) {
|
|
|
|
return fakeWorkspace.JobsList()
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
func internalError(err error) (any, int) {
|
|
|
|
return fmt.Errorf("internal error: %w", err), http.StatusInternalServerError
|
2025-01-08 12:41:08 +00:00
|
|
|
}
|