github.com/olli-ai/jx/v2@v2.0.400-0.20210921045218-14731b4dd448/pkg/cmd/step/step_unstash_test.go (about) 1 // +build unit 2 3 package step_test 4 5 import ( 6 "fmt" 7 "io/ioutil" 8 "net/http" 9 "path" 10 "testing" 11 12 "github.com/olli-ai/jx/v2/pkg/auth" 13 "github.com/olli-ai/jx/v2/pkg/cmd/step" 14 "github.com/olli-ai/jx/v2/pkg/kube" 15 "github.com/olli-ai/jx/v2/pkg/secreturl/fakevault" 16 "github.com/stretchr/testify/assert" 17 "github.com/stretchr/testify/require" 18 v1 "k8s.io/api/core/v1" 19 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 20 "k8s.io/client-go/kubernetes/fake" 21 "sigs.k8s.io/yaml" 22 ) 23 24 const secretName = kube.SecretJenkinsPipelineGitCredentials + "github-ghe" 25 26 func TestCreateBucketHTTPFn(t *testing.T) { 27 t.Parallel() 28 29 testCases := []struct { 30 name string 31 gitURL string 32 expectedTokenPrefix string 33 expectedHeader string 34 expectedHeaderValue string 35 }{ 36 { 37 name: "bitbucketserver", 38 gitURL: "bitbucket.example.com/scm/some-org/some-proj.git", 39 expectedTokenPrefix: "test:test", 40 }, 41 { 42 name: "github", 43 gitURL: "raw.githubusercontent.com/jenkins-x/environment-tekton-weasel-dev/master/OWNERS", 44 expectedTokenPrefix: "test", 45 }, 46 { 47 name: "gitlab", 48 gitURL: "gitlab.com/api/v4/projects/jxbdd%2Fenvironment-pr-751-6-lh-bdd-gl-dev/repository/files/jenkins-x%2Flogs%2Fjxbdd%2Fenvironment-pr-751-6-lh-bdd-gl-dev%2FPR-1%2F1.log/raw?ref=gh-pages", 49 expectedHeader: "PRIVATE-TOKEN", 50 expectedHeaderValue: "test", 51 }, 52 { 53 name: "ghe", 54 gitURL: "github.something.com/raw/foo/bar/branch/blah.log", 55 expectedTokenPrefix: "test", 56 }, 57 } 58 59 for _, tc := range testCases { 60 t.Run(tc.name, func(t *testing.T) { 61 ns := "jx" 62 63 authFile := path.Join("test_data", "step_unstash", tc.name+".yaml") 64 data, err := ioutil.ReadFile(authFile) 65 require.NoError(t, err) 66 67 var expectedAuthConfig auth.AuthConfig 68 err = yaml.Unmarshal(data, &expectedAuthConfig) 69 require.NoError(t, err) 70 71 namespace := &v1.Namespace{ 72 ObjectMeta: metav1.ObjectMeta{ 73 Name: ns, 74 }, 75 } 76 config := &v1.ConfigMap{ 77 ObjectMeta: metav1.ObjectMeta{ 78 Name: "jx-auth", 79 Namespace: ns, 80 Labels: map[string]string{ 81 "jenkins.io/config-type": "auth", 82 }, 83 }, 84 Data: map[string]string{ 85 secretName: string(data), 86 }, 87 } 88 kubeClient := fake.NewSimpleClientset(namespace, config) 89 configMapInterface := kubeClient.CoreV1().ConfigMaps(ns) 90 91 vaultClient := fakevault.NewFakeClient() 92 _, err = vaultClient.Write("test-cluster/pipelineUser", map[string]interface{}{"token": "test"}) 93 require.NoError(t, err) 94 expectedAuthConfig.Servers[0].Users[0].ApiToken = "test" 95 96 authCfgSvc := auth.NewConfigmapVaultAuthConfigService(secretName, configMapInterface, vaultClient) 97 _, err = authCfgSvc.LoadConfig() 98 assert.NoError(t, err) 99 100 req, err := http.NewRequest("GET", "https://"+tc.gitURL, nil) 101 assert.NoError(t, err) 102 103 httpFn := step.CreateBucketHTTPFn(authCfgSvc) 104 105 bucketURL, headerFn, err := httpFn("https://" + tc.gitURL) 106 107 assert.NoError(t, err) 108 expectedURL := fmt.Sprintf("https://%s@%s", tc.expectedTokenPrefix, tc.gitURL) 109 if tc.expectedTokenPrefix == "" { 110 expectedURL = fmt.Sprintf("https://%s", tc.gitURL) 111 } 112 assert.Equal(t, expectedURL, bucketURL) 113 114 headerFn(req) 115 116 if tc.expectedHeader != "" { 117 assert.Equal(t, tc.expectedHeaderValue, req.Header.Get(tc.expectedHeader)) 118 } 119 }) 120 } 121 }