worker/client: factor out common testing code

Just so we don't need to care about all the server-side setup in individual
test cases and we can just reuse the setup.

Signed-off-by: Ondřej Budai <ondrej@budai.cz>
This commit is contained in:
Ondřej Budai 2022-04-21 18:15:31 +02:00 committed by Tom Gundersen
parent b4d6ec5a75
commit 71a4ceecaa

View file

@ -13,7 +13,13 @@ import (
"github.com/osbuild/osbuild-composer/internal/worker"
)
func TestOAuth(t *testing.T) {
// newTestWorkerServer returns 3 strings:
// - base URL of the worker server
// - base URL of the OAuth server
// - offline token for OAuth
//
// The worker server has one pending osbuild job of arch "arch" ready to be dequeued.
func newTestWorkerServer(t *testing.T) (string, string, string) {
tempdir := t.TempDir()
q, err := fsjobqueue.New(tempdir)
@ -23,10 +29,16 @@ func TestOAuth(t *testing.T) {
BasePath: "/api/image-builder-worker/v1",
}
workerServer := worker.NewServer(nil, q, config)
_, err = workerServer.EnqueueOSBuild("arch", &worker.OSBuildJob{}, "")
require.NoError(t, err)
handler := workerServer.Handler()
workSrv := httptest.NewServer(handler)
defer workSrv.Close()
t.Cleanup(workSrv.Close)
offlineToken := "someOfflineToken"
accessToken := "accessToken!"
/* Check that the worker supplies the access token */
calls := 0
@ -36,17 +48,16 @@ func TestOAuth(t *testing.T) {
w.WriteHeader(http.StatusUnauthorized)
return
}
require.Equal(t, "Bearer accessToken!", r.Header.Get("Authorization"))
require.Equal(t, "Bearer "+accessToken, r.Header.Get("Authorization"))
handler.ServeHTTP(w, r)
}))
defer proxySrv.Close()
t.Cleanup(proxySrv.Close)
offlineToken := "someOfflineToken"
/* Start oauth srv supplying the bearer token */
oauthSrv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
calls += 1
require.Equal(t, "POST", r.Method)
err = r.ParseForm()
err := r.ParseForm()
require.NoError(t, err)
require.Equal(t, "refresh_token", r.FormValue("grant_type"))
@ -56,7 +67,7 @@ func TestOAuth(t *testing.T) {
bt := struct {
AccessToken string `json:"access_token"`
}{
"accessToken!",
accessToken,
}
w.WriteHeader(http.StatusOK)
@ -64,17 +75,20 @@ func TestOAuth(t *testing.T) {
err = json.NewEncoder(w).Encode(bt)
require.NoError(t, err)
}))
defer oauthSrv.Close()
t.Cleanup(oauthSrv.Close)
_, err = workerServer.EnqueueOSBuild("arch", &worker.OSBuildJob{}, "")
require.NoError(t, err)
return proxySrv.URL, oauthSrv.URL, offlineToken
}
func TestOAuth(t *testing.T) {
workerURL, oauthURL, offlineToken := newTestWorkerServer(t)
client, err := worker.NewClient(worker.ClientConfig{
BaseURL: proxySrv.URL,
BaseURL: workerURL,
TlsConfig: nil,
ClientId: "rhsm-api",
OfflineToken: offlineToken,
OAuthURL: oauthSrv.URL,
OAuthURL: oauthURL,
BasePath: "/api/image-builder-worker/v1",
})
require.NoError(t, err)
@ -84,4 +98,5 @@ func TestOAuth(t *testing.T) {
require.NoError(t, job.UploadArtifact("some-artifact", r))
c, err := job.Canceled()
require.False(t, c)
require.NoError(t, err)
}