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  }