package client import ( "fmt" "net/http" "net/http/httptest" "strings" "testing" "github.com/bndr/gojenkins" "github.com/stretchr/testify/assert" ) const script = "some groovy code" func Test_ExecuteScript(t *testing.T) { verifier := "verifier-text" t.Run("logs have verifier text", func(t *testing.T) { ts := httptest.NewTLSServer(http.HandlerFunc(func(responseWriter http.ResponseWriter, request *http.Request) { if strings.Contains(request.URL.Path, "/scriptText") { _, _ = fmt.Fprint(responseWriter, "some output\n"+verifier) return } responseWriter.WriteHeader(http.StatusInternalServerError) })) defer ts.Close() client := ts.Client() jenkinsClient := &jenkins{} jenkinsClient.Server = ts.URL jenkinsClient.Requester = &gojenkins.Requester{ Base: ts.URL, SslVerify: true, Client: client, BasicAuth: &gojenkins.BasicAuth{Username: "unused", Password: "unused"}, } logs, err := jenkinsClient.executeScript(script, verifier) assert.NoError(t, err, logs) }) t.Run("logs don't have verifier text", func(t *testing.T) { response := "some exception stack trace without verifier" ts := httptest.NewTLSServer(http.HandlerFunc(func(responseWriter http.ResponseWriter, request *http.Request) { if strings.Contains(request.URL.Path, "/scriptText") { _, _ = fmt.Fprint(responseWriter, response) return } responseWriter.WriteHeader(http.StatusInternalServerError) })) defer ts.Close() client := ts.Client() jenkinsClient := &jenkins{} jenkinsClient.Server = ts.URL jenkinsClient.Requester = &gojenkins.Requester{ Base: ts.URL, SslVerify: true, Client: client, BasicAuth: &gojenkins.BasicAuth{Username: "unused", Password: "unused"}, } logs, err := jenkinsClient.executeScript(script, verifier) assert.EqualError(t, err, "script execution failed", logs) assert.Equal(t, response, logs) }) t.Run("throw 500", func(t *testing.T) { ts := httptest.NewTLSServer(http.HandlerFunc(func(responseWriter http.ResponseWriter, request *http.Request) { responseWriter.WriteHeader(http.StatusInternalServerError) })) defer ts.Close() client := ts.Client() jenkinsClient := &jenkins{} jenkinsClient.Server = ts.URL jenkinsClient.Requester = &gojenkins.Requester{ Base: ts.URL, SslVerify: true, Client: client, BasicAuth: &gojenkins.BasicAuth{Username: "unused", Password: "unused"}, } logs, err := jenkinsClient.executeScript(script, verifier) assert.EqualError(t, err, "invalid status code '500', logs ''", logs) }) }