mirror of
https://github.com/kubescape/kubescape.git
synced 2026-04-15 06:58:11 +00:00
* Interfaces are unchanged
* Deprecated: low-level API funcs marked for deprecation:
HttpPost, HttpGetter, HttpDelete (an augmented version of the KS Cloud
client will expose the post report API, which is currently the sole
use-case of low-level API)
* Doc: the package is now godoc-friendly
* Style & code layout:
* listed all exposed types via aliases, for clarity/less confusing
imports
* unexported private types
* factorized query param logic
* factorized type <-> JSON using generic func & io.Reader
* "utils" are now limited to a few common utility functions
* centralized hard-coded strings as (unexported) constants
* concision: use higher-level http definitions such as constants,
cookie methods, etc
* included type-safety guards to verify that interfaces are
actually implemented by the exported types
* Tests: existing test assertions are unchanged
* tests are beefed-up to assert proper authentication flow (token & cookie).
* added unit tests for utility methods
* Perf:
* unmarshalling API responses is now flowing without extraneous memory allocation via string representation
* request headers are now passed withot extraneous map allocation
* JSON operations are now fully supported by jsoniter (no longer use encoding/json)
* Changes in functionality:
* the client is now fully extensible with KSCloudOption
* use the option functor idiom to keep constructors short
* methods that used to mute errors (i.e. return nil, nil) now bubble up errors
* the captured cookie is now captured in full, not just its value
(other cookie parameters returned are stored)
* added a request/response dump option, for debugging
* added support for SubmitReport and retrieval of UI url's
* backported utm changes (reports use case)
Signed-off-by: Frederic BIDON <fredbi@yahoo.com>
87 lines
2.5 KiB
Go
87 lines
2.5 KiB
Go
package getter
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestBuildURL(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
ks := NewKSCloudAPICustomized(
|
|
"api.example.com", "auth.example.com", // required
|
|
WithFrontendURL("ui.example.com"), // optional
|
|
WithReportURL("report.example.com"), // optional
|
|
)
|
|
|
|
t.Run("should build API URL with query params on https host", func(t *testing.T) {
|
|
require.Equal(t,
|
|
"https://api.example.com/path?q1=v1&q2=v2",
|
|
ks.buildAPIURL("/path", "q1", "v1", "q2", "v2"),
|
|
)
|
|
})
|
|
|
|
t.Run("should build API URL with query params on http host", func(t *testing.T) {
|
|
ku := NewKSCloudAPICustomized("http://api.example.com", "auth.example.com")
|
|
|
|
require.Equal(t,
|
|
"http://api.example.com/path?q1=v1&q2=v2",
|
|
ku.buildAPIURL("/path", "q1", "v1", "q2", "v2"),
|
|
)
|
|
})
|
|
|
|
t.Run("should panic when params are not provided in pairs", func(t *testing.T) {
|
|
require.Panics(t, func() {
|
|
// notice how the linter detects wrong args
|
|
_ = ks.buildAPIURL("/path", "q1", "v1", "q2") //nolint:staticcheck
|
|
})
|
|
})
|
|
|
|
t.Run("should build UI URL with query params on https host", func(t *testing.T) {
|
|
require.Equal(t,
|
|
"https://ui.example.com/path?q1=v1&q2=v2",
|
|
ks.buildUIURL("/path", "q1", "v1", "q2", "v2"),
|
|
)
|
|
})
|
|
|
|
t.Run("should build report URL with query params on https host", func(t *testing.T) {
|
|
require.Equal(t,
|
|
"https://report.example.com/path?q1=v1&q2=v2",
|
|
ks.buildReportURL("/path", "q1", "v1", "q2", "v2"),
|
|
)
|
|
})
|
|
}
|
|
|
|
func TestViewURL(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
ks := NewKSCloudAPICustomized(
|
|
"api.example.com", "auth.example.com", // required
|
|
WithFrontendURL("ui.example.com"), // optional
|
|
WithReportURL("report.example.com"), // optional
|
|
)
|
|
ks.SetAccountID("me")
|
|
ks.SetInvitationToken("invite")
|
|
|
|
t.Run("should render UI report URL", func(t *testing.T) {
|
|
require.Equal(t, "https://ui.example.com/repository-scanning/xyz", ks.ViewReportURL("xyz"))
|
|
})
|
|
|
|
t.Run("should render UI dashboard URL", func(t *testing.T) {
|
|
require.Equal(t, "https://ui.example.com/dashboard", ks.ViewDashboardURL())
|
|
})
|
|
|
|
t.Run("should render UI RBAC URL", func(t *testing.T) {
|
|
require.Equal(t, "https://ui.example.com/rbac-visualizer", ks.ViewRBACURL())
|
|
})
|
|
|
|
t.Run("should render UI scan URL", func(t *testing.T) {
|
|
require.Equal(t, "https://ui.example.com/compliance/cluster", ks.ViewScanURL("cluster"))
|
|
})
|
|
|
|
t.Run("should render UI sign URL", func(t *testing.T) {
|
|
require.Equal(t, "https://ui.example.com/account/sign-up?customerGUID=me&invitationToken=invite&utm_medium=createaccount&utm_source=ARMOgithub", ks.ViewSignURL())
|
|
})
|
|
}
|