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  }