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 }