github.com/git-lfs/git-lfs@v2.5.2+incompatible/lfsapi/endpoint_finder_test.go (about) 1 package lfsapi 2 3 import ( 4 "testing" 5 6 "github.com/stretchr/testify/assert" 7 ) 8 9 func TestEndpointDefaultsToOrigin(t *testing.T) { 10 finder := NewEndpointFinder(NewContext(nil, nil, map[string]string{ 11 "remote.origin.lfsurl": "abc", 12 })) 13 14 e := finder.Endpoint("download", "") 15 assert.Equal(t, "abc", e.Url) 16 assert.Equal(t, "", e.SshUserAndHost) 17 assert.Equal(t, "", e.SshPath) 18 } 19 20 func TestEndpointOverridesOrigin(t *testing.T) { 21 finder := NewEndpointFinder(NewContext(nil, nil, map[string]string{ 22 "lfs.url": "abc", 23 "remote.origin.lfsurl": "def", 24 })) 25 26 e := finder.Endpoint("download", "") 27 assert.Equal(t, "abc", e.Url) 28 assert.Equal(t, "", e.SshUserAndHost) 29 assert.Equal(t, "", e.SshPath) 30 } 31 32 func TestEndpointNoOverrideDefaultRemote(t *testing.T) { 33 finder := NewEndpointFinder(NewContext(nil, nil, map[string]string{ 34 "remote.origin.lfsurl": "abc", 35 "remote.other.lfsurl": "def", 36 })) 37 38 e := finder.Endpoint("download", "") 39 assert.Equal(t, "abc", e.Url) 40 assert.Equal(t, "", e.SshUserAndHost) 41 assert.Equal(t, "", e.SshPath) 42 } 43 44 func TestEndpointUseAlternateRemote(t *testing.T) { 45 finder := NewEndpointFinder(NewContext(nil, nil, map[string]string{ 46 "remote.origin.lfsurl": "abc", 47 "remote.other.lfsurl": "def", 48 })) 49 50 e := finder.Endpoint("download", "other") 51 assert.Equal(t, "def", e.Url) 52 assert.Equal(t, "", e.SshUserAndHost) 53 assert.Equal(t, "", e.SshPath) 54 } 55 56 func TestEndpointAddsLfsSuffix(t *testing.T) { 57 finder := NewEndpointFinder(NewContext(nil, nil, map[string]string{ 58 "remote.origin.url": "https://example.com/foo/bar", 59 })) 60 61 e := finder.Endpoint("download", "") 62 assert.Equal(t, "https://example.com/foo/bar.git/info/lfs", e.Url) 63 assert.Equal(t, "", e.SshUserAndHost) 64 assert.Equal(t, "", e.SshPath) 65 } 66 67 func TestBareEndpointAddsLfsSuffix(t *testing.T) { 68 finder := NewEndpointFinder(NewContext(nil, nil, map[string]string{ 69 "remote.origin.url": "https://example.com/foo/bar.git", 70 })) 71 72 e := finder.Endpoint("download", "") 73 assert.Equal(t, "https://example.com/foo/bar.git/info/lfs", e.Url) 74 assert.Equal(t, "", e.SshUserAndHost) 75 assert.Equal(t, "", e.SshPath) 76 } 77 78 func TestEndpointSeparateClonePushUrl(t *testing.T) { 79 finder := NewEndpointFinder(NewContext(nil, nil, map[string]string{ 80 "remote.origin.url": "https://example.com/foo/bar.git", 81 "remote.origin.pushurl": "https://readwrite.com/foo/bar.git", 82 })) 83 84 e := finder.Endpoint("download", "") 85 assert.Equal(t, "https://example.com/foo/bar.git/info/lfs", e.Url) 86 assert.Equal(t, "", e.SshUserAndHost) 87 assert.Equal(t, "", e.SshPath) 88 89 e = finder.Endpoint("upload", "") 90 assert.Equal(t, "https://readwrite.com/foo/bar.git/info/lfs", e.Url) 91 assert.Equal(t, "", e.SshUserAndHost) 92 assert.Equal(t, "", e.SshPath) 93 } 94 95 func TestEndpointOverriddenSeparateClonePushLfsUrl(t *testing.T) { 96 finder := NewEndpointFinder(NewContext(nil, nil, map[string]string{ 97 "remote.origin.url": "https://example.com/foo/bar.git", 98 "remote.origin.pushurl": "https://readwrite.com/foo/bar.git", 99 "remote.origin.lfsurl": "https://examplelfs.com/foo/bar", 100 "remote.origin.lfspushurl": "https://readwritelfs.com/foo/bar", 101 })) 102 103 e := finder.Endpoint("download", "") 104 assert.Equal(t, "https://examplelfs.com/foo/bar", e.Url) 105 assert.Equal(t, "", e.SshUserAndHost) 106 assert.Equal(t, "", e.SshPath) 107 108 e = finder.Endpoint("upload", "") 109 assert.Equal(t, "https://readwritelfs.com/foo/bar", e.Url) 110 assert.Equal(t, "", e.SshUserAndHost) 111 assert.Equal(t, "", e.SshPath) 112 } 113 114 func TestEndpointGlobalSeparateLfsPush(t *testing.T) { 115 finder := NewEndpointFinder(NewContext(nil, nil, map[string]string{ 116 "lfs.url": "https://readonly.com/foo/bar", 117 "lfs.pushurl": "https://write.com/foo/bar", 118 })) 119 120 e := finder.Endpoint("download", "") 121 assert.Equal(t, "https://readonly.com/foo/bar", e.Url) 122 assert.Equal(t, "", e.SshUserAndHost) 123 assert.Equal(t, "", e.SshPath) 124 125 e = finder.Endpoint("upload", "") 126 assert.Equal(t, "https://write.com/foo/bar", e.Url) 127 assert.Equal(t, "", e.SshUserAndHost) 128 assert.Equal(t, "", e.SshPath) 129 } 130 131 func TestSSHEndpointOverridden(t *testing.T) { 132 finder := NewEndpointFinder(NewContext(nil, nil, map[string]string{ 133 "remote.origin.url": "git@example.com:foo/bar", 134 "remote.origin.lfsurl": "lfs", 135 })) 136 137 e := finder.Endpoint("download", "") 138 assert.Equal(t, "lfs", e.Url) 139 assert.Equal(t, "", e.SshUserAndHost) 140 assert.Equal(t, "", e.SshPath) 141 assert.Equal(t, "", e.SshPort) 142 } 143 144 func TestSSHEndpointAddsLfsSuffix(t *testing.T) { 145 finder := NewEndpointFinder(NewContext(nil, nil, map[string]string{ 146 "remote.origin.url": "ssh://git@example.com/foo/bar", 147 })) 148 149 e := finder.Endpoint("download", "") 150 assert.Equal(t, "https://example.com/foo/bar.git/info/lfs", e.Url) 151 assert.Equal(t, "git@example.com", e.SshUserAndHost) 152 assert.Equal(t, "foo/bar", e.SshPath) 153 assert.Equal(t, "", e.SshPort) 154 } 155 156 func TestSSHCustomPortEndpointAddsLfsSuffix(t *testing.T) { 157 finder := NewEndpointFinder(NewContext(nil, nil, map[string]string{ 158 "remote.origin.url": "ssh://git@example.com:9000/foo/bar", 159 })) 160 161 e := finder.Endpoint("download", "") 162 assert.Equal(t, "https://example.com/foo/bar.git/info/lfs", e.Url) 163 assert.Equal(t, "git@example.com", e.SshUserAndHost) 164 assert.Equal(t, "foo/bar", e.SshPath) 165 assert.Equal(t, "9000", e.SshPort) 166 } 167 168 func TestBareSSHEndpointAddsLfsSuffix(t *testing.T) { 169 finder := NewEndpointFinder(NewContext(nil, nil, map[string]string{ 170 "remote.origin.url": "git@example.com:foo/bar.git", 171 })) 172 173 e := finder.Endpoint("download", "") 174 assert.Equal(t, "https://example.com/foo/bar.git/info/lfs", e.Url) 175 assert.Equal(t, "git@example.com", e.SshUserAndHost) 176 assert.Equal(t, "foo/bar.git", e.SshPath) 177 assert.Equal(t, "", e.SshPort) 178 } 179 180 func TestBareSSSHEndpointWithCustomPortInBrackets(t *testing.T) { 181 finder := NewEndpointFinder(NewContext(nil, nil, map[string]string{ 182 "remote.origin.url": "[git@example.com:2222]:foo/bar.git", 183 })) 184 185 e := finder.Endpoint("download", "") 186 assert.Equal(t, "https://example.com/foo/bar.git/info/lfs", e.Url) 187 assert.Equal(t, "git@example.com", e.SshUserAndHost) 188 assert.Equal(t, "foo/bar.git", e.SshPath) 189 assert.Equal(t, "2222", e.SshPort) 190 } 191 192 func TestSSHEndpointFromGlobalLfsUrl(t *testing.T) { 193 finder := NewEndpointFinder(NewContext(nil, nil, map[string]string{ 194 "lfs.url": "git@example.com:foo/bar.git", 195 })) 196 197 e := finder.Endpoint("download", "") 198 assert.Equal(t, "https://example.com/foo/bar.git", e.Url) 199 assert.Equal(t, "git@example.com", e.SshUserAndHost) 200 assert.Equal(t, "foo/bar.git", e.SshPath) 201 assert.Equal(t, "", e.SshPort) 202 } 203 204 func TestHTTPEndpointAddsLfsSuffix(t *testing.T) { 205 finder := NewEndpointFinder(NewContext(nil, nil, map[string]string{ 206 "remote.origin.url": "http://example.com/foo/bar", 207 })) 208 209 e := finder.Endpoint("download", "") 210 assert.Equal(t, "http://example.com/foo/bar.git/info/lfs", e.Url) 211 assert.Equal(t, "", e.SshUserAndHost) 212 assert.Equal(t, "", e.SshPath) 213 assert.Equal(t, "", e.SshPort) 214 } 215 216 func TestBareHTTPEndpointAddsLfsSuffix(t *testing.T) { 217 finder := NewEndpointFinder(NewContext(nil, nil, map[string]string{ 218 "remote.origin.url": "http://example.com/foo/bar.git", 219 })) 220 221 e := finder.Endpoint("download", "") 222 assert.Equal(t, "http://example.com/foo/bar.git/info/lfs", e.Url) 223 assert.Equal(t, "", e.SshUserAndHost) 224 assert.Equal(t, "", e.SshPath) 225 assert.Equal(t, "", e.SshPort) 226 } 227 228 func TestGitEndpointAddsLfsSuffix(t *testing.T) { 229 finder := NewEndpointFinder(NewContext(nil, nil, map[string]string{ 230 "remote.origin.url": "git://example.com/foo/bar", 231 })) 232 233 e := finder.Endpoint("download", "") 234 assert.Equal(t, "https://example.com/foo/bar.git/info/lfs", e.Url) 235 assert.Equal(t, "", e.SshUserAndHost) 236 assert.Equal(t, "", e.SshPath) 237 assert.Equal(t, "", e.SshPort) 238 } 239 240 func TestGitEndpointAddsLfsSuffixWithCustomProtocol(t *testing.T) { 241 finder := NewEndpointFinder(NewContext(nil, nil, map[string]string{ 242 "remote.origin.url": "git://example.com/foo/bar", 243 "lfs.gitprotocol": "http", 244 })) 245 246 e := finder.Endpoint("download", "") 247 assert.Equal(t, "http://example.com/foo/bar.git/info/lfs", e.Url) 248 assert.Equal(t, "", e.SshUserAndHost) 249 assert.Equal(t, "", e.SshPath) 250 assert.Equal(t, "", e.SshPort) 251 } 252 253 func TestBareGitEndpointAddsLfsSuffix(t *testing.T) { 254 finder := NewEndpointFinder(NewContext(nil, nil, map[string]string{ 255 "remote.origin.url": "git://example.com/foo/bar.git", 256 })) 257 258 e := finder.Endpoint("download", "") 259 assert.Equal(t, "https://example.com/foo/bar.git/info/lfs", e.Url) 260 assert.Equal(t, "", e.SshUserAndHost) 261 assert.Equal(t, "", e.SshPath) 262 assert.Equal(t, "", e.SshPort) 263 } 264 265 func TestLocalPathEndpointAddsDotGitDir(t *testing.T) { 266 finder := NewEndpointFinder(NewContext(nil, nil, map[string]string{ 267 "remote.origin.url": "/local/path", 268 })) 269 e := finder.Endpoint("download", "") 270 assert.Equal(t, "file:///local/path/.git/info/lfs", e.Url) 271 } 272 273 func TestLocalPathEndpointPreservesDotGit(t *testing.T) { 274 finder := NewEndpointFinder(NewContext(nil, nil, map[string]string{ 275 "remote.origin.url": "/local/path.git", 276 })) 277 e := finder.Endpoint("download", "") 278 assert.Equal(t, "file:///local/path.git/info/lfs", e.Url) 279 } 280 281 func TestAccessConfig(t *testing.T) { 282 type accessTest struct { 283 Access string 284 PrivateAccess bool 285 } 286 287 tests := map[string]accessTest{ 288 "": {"none", false}, 289 "basic": {"basic", true}, 290 "BASIC": {"basic", true}, 291 "private": {"basic", true}, 292 "PRIVATE": {"basic", true}, 293 "invalidauth": {"invalidauth", true}, 294 } 295 296 for value, expected := range tests { 297 finder := NewEndpointFinder(NewContext(nil, nil, map[string]string{ 298 "lfs.url": "http://example.com", 299 "lfs.http://example.com.access": value, 300 "lfs.https://example.com.access": "bad", 301 })) 302 303 dl := finder.Endpoint("upload", "") 304 ul := finder.Endpoint("download", "") 305 306 if access := finder.AccessFor(dl.Url); access != Access(expected.Access) { 307 t.Errorf("Expected Access() with value %q to be %v, got %v", value, expected.Access, access) 308 } 309 if access := finder.AccessFor(ul.Url); access != Access(expected.Access) { 310 t.Errorf("Expected Access() with value %q to be %v, got %v", value, expected.Access, access) 311 } 312 } 313 314 // Test again but with separate push url 315 for value, expected := range tests { 316 finder := NewEndpointFinder(NewContext(nil, nil, map[string]string{ 317 "lfs.url": "http://example.com", 318 "lfs.pushurl": "http://examplepush.com", 319 "lfs.http://example.com.access": value, 320 "lfs.http://examplepush.com.access": value, 321 "lfs.https://example.com.access": "bad", 322 })) 323 324 dl := finder.Endpoint("upload", "") 325 ul := finder.Endpoint("download", "") 326 327 if access := finder.AccessFor(dl.Url); access != Access(expected.Access) { 328 t.Errorf("Expected Access() with value %q to be %v, got %v", value, expected.Access, access) 329 } 330 if access := finder.AccessFor(ul.Url); access != Access(expected.Access) { 331 t.Errorf("Expected Access() with value %q to be %v, got %v", value, expected.Access, access) 332 } 333 } 334 } 335 336 func TestAccessAbsentConfig(t *testing.T) { 337 finder := NewEndpointFinder(nil) 338 assert.Equal(t, NoneAccess, finder.AccessFor(finder.Endpoint("download", "").Url)) 339 assert.Equal(t, NoneAccess, finder.AccessFor(finder.Endpoint("upload", "").Url)) 340 } 341 342 func TestSetAccess(t *testing.T) { 343 finder := NewEndpointFinder(NewContext(nil, nil, map[string]string{})) 344 345 assert.Equal(t, NoneAccess, finder.AccessFor("http://example.com")) 346 finder.SetAccess("http://example.com", NTLMAccess) 347 assert.Equal(t, NTLMAccess, finder.AccessFor("http://example.com")) 348 } 349 350 func TestChangeAccess(t *testing.T) { 351 finder := NewEndpointFinder(NewContext(nil, nil, map[string]string{ 352 "lfs.http://example.com.access": "basic", 353 })) 354 355 assert.Equal(t, BasicAccess, finder.AccessFor("http://example.com")) 356 finder.SetAccess("http://example.com", NTLMAccess) 357 assert.Equal(t, NTLMAccess, finder.AccessFor("http://example.com")) 358 } 359 360 func TestDeleteAccessWithNone(t *testing.T) { 361 finder := NewEndpointFinder(NewContext(nil, nil, map[string]string{ 362 "lfs.http://example.com.access": "basic", 363 })) 364 365 assert.Equal(t, BasicAccess, finder.AccessFor("http://example.com")) 366 finder.SetAccess("http://example.com", NoneAccess) 367 assert.Equal(t, NoneAccess, finder.AccessFor("http://example.com")) 368 } 369 370 func TestDeleteAccessWithEmptyString(t *testing.T) { 371 finder := NewEndpointFinder(NewContext(nil, nil, map[string]string{ 372 "lfs.http://example.com.access": "basic", 373 })) 374 375 assert.Equal(t, BasicAccess, finder.AccessFor("http://example.com")) 376 finder.SetAccess("http://example.com", Access("")) 377 assert.Equal(t, NoneAccess, finder.AccessFor("http://example.com")) 378 }