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  }