github.com/stffabi/git-lfs@v2.3.5-0.20180214015214-8eeaa8d88902+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 TestSSHEndpointFromGlobalLfsUrl(t *testing.T) { 181 finder := NewEndpointFinder(NewContext(nil, nil, map[string]string{ 182 "lfs.url": "git@example.com:foo/bar.git", 183 })) 184 185 e := finder.Endpoint("download", "") 186 assert.Equal(t, "https://example.com/foo/bar.git", e.Url) 187 assert.Equal(t, "git@example.com", e.SshUserAndHost) 188 assert.Equal(t, "foo/bar.git", e.SshPath) 189 assert.Equal(t, "", e.SshPort) 190 } 191 192 func TestHTTPEndpointAddsLfsSuffix(t *testing.T) { 193 finder := NewEndpointFinder(NewContext(nil, nil, map[string]string{ 194 "remote.origin.url": "http://example.com/foo/bar", 195 })) 196 197 e := finder.Endpoint("download", "") 198 assert.Equal(t, "http://example.com/foo/bar.git/info/lfs", e.Url) 199 assert.Equal(t, "", e.SshUserAndHost) 200 assert.Equal(t, "", e.SshPath) 201 assert.Equal(t, "", e.SshPort) 202 } 203 204 func TestBareHTTPEndpointAddsLfsSuffix(t *testing.T) { 205 finder := NewEndpointFinder(NewContext(nil, nil, map[string]string{ 206 "remote.origin.url": "http://example.com/foo/bar.git", 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 TestGitEndpointAddsLfsSuffix(t *testing.T) { 217 finder := NewEndpointFinder(NewContext(nil, nil, map[string]string{ 218 "remote.origin.url": "git://example.com/foo/bar", 219 })) 220 221 e := finder.Endpoint("download", "") 222 assert.Equal(t, "https://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 TestGitEndpointAddsLfsSuffixWithCustomProtocol(t *testing.T) { 229 finder := NewEndpointFinder(NewContext(nil, nil, map[string]string{ 230 "remote.origin.url": "git://example.com/foo/bar", 231 "lfs.gitprotocol": "http", 232 })) 233 234 e := finder.Endpoint("download", "") 235 assert.Equal(t, "http://example.com/foo/bar.git/info/lfs", e.Url) 236 assert.Equal(t, "", e.SshUserAndHost) 237 assert.Equal(t, "", e.SshPath) 238 assert.Equal(t, "", e.SshPort) 239 } 240 241 func TestBareGitEndpointAddsLfsSuffix(t *testing.T) { 242 finder := NewEndpointFinder(NewContext(nil, nil, map[string]string{ 243 "remote.origin.url": "git://example.com/foo/bar.git", 244 })) 245 246 e := finder.Endpoint("download", "") 247 assert.Equal(t, "https://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 TestAccessConfig(t *testing.T) { 254 type accessTest struct { 255 Access string 256 PrivateAccess bool 257 } 258 259 tests := map[string]accessTest{ 260 "": {"none", false}, 261 "basic": {"basic", true}, 262 "BASIC": {"basic", true}, 263 "private": {"basic", true}, 264 "PRIVATE": {"basic", true}, 265 "invalidauth": {"invalidauth", true}, 266 } 267 268 for value, expected := range tests { 269 finder := NewEndpointFinder(NewContext(nil, nil, map[string]string{ 270 "lfs.url": "http://example.com", 271 "lfs.http://example.com.access": value, 272 "lfs.https://example.com.access": "bad", 273 })) 274 275 dl := finder.Endpoint("upload", "") 276 ul := finder.Endpoint("download", "") 277 278 if access := finder.AccessFor(dl.Url); access != Access(expected.Access) { 279 t.Errorf("Expected Access() with value %q to be %v, got %v", value, expected.Access, access) 280 } 281 if access := finder.AccessFor(ul.Url); access != Access(expected.Access) { 282 t.Errorf("Expected Access() with value %q to be %v, got %v", value, expected.Access, access) 283 } 284 } 285 286 // Test again but with separate push url 287 for value, expected := range tests { 288 finder := NewEndpointFinder(NewContext(nil, nil, map[string]string{ 289 "lfs.url": "http://example.com", 290 "lfs.pushurl": "http://examplepush.com", 291 "lfs.http://example.com.access": value, 292 "lfs.http://examplepush.com.access": value, 293 "lfs.https://example.com.access": "bad", 294 })) 295 296 dl := finder.Endpoint("upload", "") 297 ul := finder.Endpoint("download", "") 298 299 if access := finder.AccessFor(dl.Url); access != Access(expected.Access) { 300 t.Errorf("Expected Access() with value %q to be %v, got %v", value, expected.Access, access) 301 } 302 if access := finder.AccessFor(ul.Url); access != Access(expected.Access) { 303 t.Errorf("Expected Access() with value %q to be %v, got %v", value, expected.Access, access) 304 } 305 } 306 } 307 308 func TestAccessAbsentConfig(t *testing.T) { 309 finder := NewEndpointFinder(nil) 310 assert.Equal(t, NoneAccess, finder.AccessFor(finder.Endpoint("download", "").Url)) 311 assert.Equal(t, NoneAccess, finder.AccessFor(finder.Endpoint("upload", "").Url)) 312 } 313 314 func TestSetAccess(t *testing.T) { 315 finder := NewEndpointFinder(NewContext(nil, nil, map[string]string{})) 316 317 assert.Equal(t, NoneAccess, finder.AccessFor("http://example.com")) 318 finder.SetAccess("http://example.com", NTLMAccess) 319 assert.Equal(t, NTLMAccess, finder.AccessFor("http://example.com")) 320 } 321 322 func TestChangeAccess(t *testing.T) { 323 finder := NewEndpointFinder(NewContext(nil, nil, map[string]string{ 324 "lfs.http://example.com.access": "basic", 325 })) 326 327 assert.Equal(t, BasicAccess, finder.AccessFor("http://example.com")) 328 finder.SetAccess("http://example.com", NTLMAccess) 329 assert.Equal(t, NTLMAccess, finder.AccessFor("http://example.com")) 330 } 331 332 func TestDeleteAccessWithNone(t *testing.T) { 333 finder := NewEndpointFinder(NewContext(nil, nil, map[string]string{ 334 "lfs.http://example.com.access": "basic", 335 })) 336 337 assert.Equal(t, BasicAccess, finder.AccessFor("http://example.com")) 338 finder.SetAccess("http://example.com", NoneAccess) 339 assert.Equal(t, NoneAccess, finder.AccessFor("http://example.com")) 340 } 341 342 func TestDeleteAccessWithEmptyString(t *testing.T) { 343 finder := NewEndpointFinder(NewContext(nil, nil, map[string]string{ 344 "lfs.http://example.com.access": "basic", 345 })) 346 347 assert.Equal(t, BasicAccess, finder.AccessFor("http://example.com")) 348 finder.SetAccess("http://example.com", Access("")) 349 assert.Equal(t, NoneAccess, finder.AccessFor("http://example.com")) 350 }