package actions import ( "context" "fmt" "testing" "github.com/go-logr/logr" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) var testUserAgent = UserAgentInfo{ Version: "test", CommitSHA: "test", ScaleSetID: 1, } func TestMultiClientCaching(t *testing.T) { logger := logr.Discard() ctx := context.Background() multiClient := NewMultiClient(logger).(*multiClient) defaultNamespace := "default" defaultConfigURL := "https://github.com/org/repo" defaultCreds := &ActionsAuth{ Token: "token", } client, err := NewClient(defaultConfigURL, defaultCreds) require.NoError(t, err) multiClient.clients[ActionsClientKey{client.Identifier(), defaultNamespace}] = client // Verify that the client is cached cachedClient, err := multiClient.GetClientFor( ctx, defaultConfigURL, *defaultCreds, defaultNamespace, ) require.NoError(t, err) assert.Equal(t, client, cachedClient) assert.Len(t, multiClient.clients, 1) // Asking for a different client results in creating and caching a new client otherNamespace := "other" newClient, err := multiClient.GetClientFor( ctx, defaultConfigURL, *defaultCreds, otherNamespace, ) require.NoError(t, err) assert.NotEqual(t, client, newClient) assert.Len(t, multiClient.clients, 2) } func TestMultiClientOptions(t *testing.T) { logger := logr.Discard() ctx := context.Background() defaultNamespace := "default" defaultConfigURL := "https://github.com/org/repo" t.Run("GetClientFor", func(t *testing.T) { defaultCreds := &ActionsAuth{ Token: "token", } multiClient := NewMultiClient(logger) service, err := multiClient.GetClientFor( ctx, defaultConfigURL, *defaultCreds, defaultNamespace, ) service.SetUserAgent(testUserAgent) require.NoError(t, err) client := service.(*Client) req, err := client.NewGitHubAPIRequest(ctx, "GET", "/test", nil) require.NoError(t, err) assert.Equal(t, testUserAgent.String(), req.Header.Get("User-Agent")) }) t.Run("GetClientFromSecret", func(t *testing.T) { secret := map[string][]byte{ "github_token": []byte("token"), } multiClient := NewMultiClient(logger) service, err := multiClient.GetClientFromSecret( ctx, defaultConfigURL, defaultNamespace, secret, ) service.SetUserAgent(testUserAgent) require.NoError(t, err) client := service.(*Client) req, err := client.NewGitHubAPIRequest(ctx, "GET", "/test", nil) require.NoError(t, err) assert.Equal(t, testUserAgent.String(), req.Header.Get("User-Agent")) }) } func TestCreateJWT(t *testing.T) { key := `-----BEGIN PRIVATE KEY----- MIIEugIBADANBgkqhkiG9w0BAQEFAASCBKQwggSgAgEAAoIBAQC7tgquvNIp+Ik3 rRVZ9r0zJLsSzTHqr2dA6EUUmpRiQ25MzjMqKqu0OBwvh/pZyfjSIkKrhIridNK4 DWnPfPWHE2K3Muh0X2sClxtqiiFmXsvbiTzhUm5a+zCcv0pJCWYnKi0HmyXpAXjJ iN8mWliZN896verVYXWrod7EaAnuST4TiJeqZYW4bBBG81fPNc/UP4j6CKAW8nx9 HtcX6ApvlHeCLZUTW/qhGLO0nLKoEOr3tXCPW5VjKzlm134Dl+8PN6f1wv6wMAoA lo7Ha5+c74jhPL6gHXg7cRaHQmuJCJrtl8qbLkFAulfkBixBw/6i11xoM/MOC64l TWmXqrxTAgMBAAECgf9zYlxfL+rdHRXCoOm7pUeSPL0dWaPFP12d/Z9LSlDAt/h6 Pd+eqYEwhf795SAbJuzNp51Ls6LUGnzmLOdojKwfqJ51ahT1qbcBcMZNOcvtGqZ9 xwLG993oyR49C361Lf2r8mKrdrR5/fW0B1+1s6A+eRFivqFOtsOc4V4iMeHYsCVJ hM7yMu0UfpolDJA/CzopsoGq3UuQlibUEUxKULza06aDjg/gBH3PnP+fQ1m0ovDY h0pX6SCq5fXVJFS+Pbpu7j2ePNm3mr0qQhrUONZq0qhGN/piCbBZe1CqWApyO7nA B95VChhL1eYs1BKvQePh12ap83woIUcW2mJF2F0CgYEA+aERTuKWEm+zVNKS9t3V qNhecCOpayKM9OlALIK/9W6KBS+pDsjQQteQAUAItjvLiDjd5KsrtSgjbSgr66IP b615Pakywe5sdnVGzSv+07KMzuFob9Hj6Xv9als9Y2geVhUZB2Frqve/UCjmC56i zuQTSele5QKCSSTFBV3423cCgYEAwIBv9ChsI+mse6vPaqSPpZ2n237anThMcP33 aS0luYXqMWXZ0TQ/uSmCElY4G3xqNo8szzfy6u0HpldeUsEUsIcBNUV5kIIb8wKu Zmgcc8gBIjJkyUJI4wuz9G/fegEUj3u6Cttmmj4iWLzCRscRJdfGpqwRIhOGyXb9 2Rur5QUCgYAGWIPaH4R1H4XNiDTYNbdyvV1ZOG7cHFq89xj8iK5cjNzRWO7RQ2WX 7WbpwTj3ePmpktiBMaDA0C5mXfkP2mTOD/jfCmgR6f+z2zNbj9zAgO93at9+yDUl AFPm2j7rQgBTa+HhACb+h6HDZebDMNsuqzmaTWZuJ+wr89VWV5c17QKBgH3jwNNQ mCAIUidynaulQNfTOZIe7IMC7WK7g9CBmPkx7Y0uiXr6C25hCdJKFllLTP6vNWOy uCcQqf8LhgDiilBDifO3op9xpyuOJlWMYocJVkxx3l2L/rSU07PYcbKNAFAxXuJ4 xym51qZnkznMN5ei/CPFxVKeqHgaXDpekVStAoGAV3pSWAKDXY/42XEHixrCTqLW kBxfaf3g7iFnl3u8+7Z/7Cb4ZqFcw0bRJseKuR9mFvBhcZxSErbMDEYrevefU9aM APeCxEyw6hJXgbWKoG7Fw2g2HP3ytCJ4YzH0zNitHjk/1h4BG7z8cEQILCSv5mN2 etFcaQuTHEZyRhhJ4BU= -----END PRIVATE KEY-----` auth := &GitHubAppAuth{ AppID: 123, AppPrivateKey: key, } jwt, err := createJWTForGitHubApp(auth) if err != nil { t.Fatal(err) } fmt.Println(jwt) }