github.com/zppinho/prow@v0.0.0-20240510014325-1738badeb017/pkg/io/providers/providers_test.go (about)

     1  /*
     2  Copyright 2020 The Kubernetes Authors.
     3  
     4  Licensed under the Apache License, Version 2.0 (the "License");
     5  you may not use this file except in compliance with the License.
     6  You may obtain a copy of the License at
     7  
     8      http://www.apache.org/licenses/LICENSE-2.0
     9  
    10  Unless required by applicable law or agreed to in writing, software
    11  distributed under the License is distributed on an "AS IS" BASIS,
    12  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13  See the License for the specific language governing permissions and
    14  limitations under the License.
    15  */
    16  
    17  package providers_test
    18  
    19  import (
    20  	"testing"
    21  
    22  	"sigs.k8s.io/prow/pkg/io/providers"
    23  )
    24  
    25  func TestHasStorageProviderPrefix(t *testing.T) {
    26  	tests := []struct {
    27  		name string
    28  		path string
    29  		want bool
    30  	}{
    31  		{
    32  			name: "gs prefix",
    33  			path: "gs/kubernetes-jenkins",
    34  			want: true,
    35  		},
    36  		{
    37  			name: "s3 prefix",
    38  			path: "gs/kubernetes-jenkins",
    39  			want: true,
    40  		},
    41  		{
    42  			name: "no prefix",
    43  			path: "kubernetes-jenkins",
    44  			want: false,
    45  		},
    46  		{
    47  			name: "no prefix bucket starts with storage provider id",
    48  			path: "gs-bucket",
    49  			want: false,
    50  		},
    51  	}
    52  	for _, tt := range tests {
    53  		t.Run(tt.name, func(t *testing.T) {
    54  			if got := providers.HasStorageProviderPrefix(tt.path); got != tt.want {
    55  				t.Errorf("HasStorageProviderPrefix() = %v, want %v", got, tt.want)
    56  			}
    57  		})
    58  	}
    59  }
    60  
    61  func TestParseStoragePath(t *testing.T) {
    62  	type args struct {
    63  		storagePath string
    64  	}
    65  	tests := []struct {
    66  		name                string
    67  		args                args
    68  		wantStorageProvider string
    69  		wantBucket          string
    70  		wantRelativePath    string
    71  		wantErr             bool
    72  	}{
    73  		{
    74  			name:                "parse s3 path",
    75  			args:                args{storagePath: "s3://prow-artifacts/test"},
    76  			wantStorageProvider: providers.S3,
    77  			wantBucket:          "prow-artifacts",
    78  			wantRelativePath:    "test",
    79  			wantErr:             false,
    80  		},
    81  		{
    82  			name:                "parse s3 deep path",
    83  			args:                args{storagePath: "s3://prow-artifacts/pr-logs/test"},
    84  			wantStorageProvider: providers.S3,
    85  			wantBucket:          "prow-artifacts",
    86  			wantRelativePath:    "pr-logs/test",
    87  			wantErr:             false,
    88  		},
    89  		{
    90  			name:                "parse gs path",
    91  			args:                args{storagePath: "gs://prow-artifacts/pr-logs/bazel-build/test.log"},
    92  			wantStorageProvider: providers.GS,
    93  			wantBucket:          "prow-artifacts",
    94  			wantRelativePath:    "pr-logs/bazel-build/test.log",
    95  			wantErr:             false,
    96  		},
    97  		{
    98  			name:                "parse gs short path",
    99  			args:                args{storagePath: "gs://prow-artifacts"},
   100  			wantStorageProvider: providers.GS,
   101  			wantBucket:          "prow-artifacts",
   102  			wantRelativePath:    "",
   103  			wantErr:             false,
   104  		},
   105  		{
   106  			name:    "parse gs to short path fails",
   107  			args:    args{storagePath: "gs://"},
   108  			wantErr: true,
   109  		},
   110  		{
   111  			name:                "parse unknown prefix path",
   112  			args:                args{storagePath: "s4://prow-artifacts/pr-logs/bazel-build/test.log"},
   113  			wantStorageProvider: "s4",
   114  			wantBucket:          "prow-artifacts",
   115  			wantRelativePath:    "pr-logs/bazel-build/test.log",
   116  		},
   117  	}
   118  	for _, tt := range tests {
   119  		t.Run(tt.name, func(t *testing.T) {
   120  			gotStorageProvider, gotBucket, gotRelativePath, err := providers.ParseStoragePath(tt.args.storagePath)
   121  			if (err != nil) != tt.wantErr {
   122  				t.Fatalf("ParseStoragePath() error = %v, wantErr %v", err, tt.wantErr)
   123  			}
   124  			if gotStorageProvider != tt.wantStorageProvider {
   125  				t.Errorf("ParseStoragePath() gotStorageProvider = %v, want %v", gotStorageProvider, tt.wantStorageProvider)
   126  			}
   127  			if gotBucket != tt.wantBucket {
   128  				t.Errorf("ParseStoragePath() gotBucket = %v, want %v", gotBucket, tt.wantBucket)
   129  			}
   130  			if gotRelativePath != tt.wantRelativePath {
   131  				t.Errorf("ParseStoragePath() gotRelativePath = %v, want %v", gotRelativePath, tt.wantRelativePath)
   132  			}
   133  		})
   134  	}
   135  }
   136  
   137  func TestStoragePath(t *testing.T) {
   138  	tests := []struct {
   139  		name    string
   140  		bucket  string
   141  		path    string
   142  		want    string
   143  		wantErr bool
   144  	}{
   145  		{
   146  			name:   "default",
   147  			bucket: "a",
   148  			path:   "b",
   149  			want:   "gs://a/b",
   150  		},
   151  		{
   152  			name:    "invalid",
   153  			bucket:  " gs://",
   154  			path:    "b",
   155  			want:    "",
   156  			wantErr: true,
   157  		},
   158  		{
   159  			name:   "explicit",
   160  			bucket: "gs://a",
   161  			path:   "b",
   162  			want:   "gs://a/b",
   163  		},
   164  		{
   165  			name:   "something-else",
   166  			bucket: "s3://a",
   167  			path:   "b",
   168  			want:   "s3://a/b",
   169  		},
   170  	}
   171  
   172  	for _, tc := range tests {
   173  		tc := tc
   174  		t.Run(tc.name, func(t *testing.T) {
   175  			got, gotErr := providers.StoragePath(tc.bucket, tc.path)
   176  
   177  			if tc.wantErr != ((gotErr != nil) && tc.wantErr) {
   178  				t.Fatalf("Error mismatching. Want: %v, got: %v", tc.wantErr, gotErr)
   179  			}
   180  			if tc.want != got {
   181  				t.Fatalf("Got wrong GCS storage path. Want: %s, got: %s", tc.want, got)
   182  			}
   183  		})
   184  	}
   185  }