github.com/mutagen-io/mutagen@v0.18.0-rc1/pkg/url/url_test.go (about)

     1  package url
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/mutagen-io/mutagen/pkg/filesystem"
     7  )
     8  
     9  // TestKindSupported tests that URL kind support detection works as expected.
    10  func TestKindSupported(t *testing.T) {
    11  	// Set up test cases.
    12  	testCases := []struct {
    13  		kind     Kind
    14  		expected bool
    15  	}{
    16  		{Kind_Synchronization, true},
    17  		{Kind_Forwarding, true},
    18  		{(Kind_Forwarding + 1), false},
    19  	}
    20  
    21  	// Process test cases.
    22  	for _, testCase := range testCases {
    23  		if supported := testCase.kind.Supported(); supported != testCase.expected {
    24  			t.Errorf(
    25  				"kind support (%t) does not match expected (%t)",
    26  				supported,
    27  				testCase.expected,
    28  			)
    29  		}
    30  	}
    31  }
    32  
    33  func TestURLEnsureValidNilInvalid(t *testing.T) {
    34  	var invalid *URL
    35  	if invalid.EnsureValid() == nil {
    36  		t.Error("nil URL marked as valid")
    37  	}
    38  }
    39  
    40  func TestURLEnsureValidLocalUsernameInvalid(t *testing.T) {
    41  	invalid := &URL{
    42  		User: "george",
    43  		Path: "some/path",
    44  	}
    45  	if invalid.EnsureValid() == nil {
    46  		t.Error("invalid URL classified as valid")
    47  	}
    48  }
    49  
    50  func TestURLForwardingEnsureValidForwardingEndpointRelativeLocalSocketInvalid(t *testing.T) {
    51  	invalid := &URL{
    52  		Kind: Kind_Forwarding,
    53  		Path: "unix:relative/socket.sock",
    54  	}
    55  	if invalid.EnsureValid() == nil {
    56  		t.Error("invalid URL classified as valid")
    57  	}
    58  }
    59  
    60  func TestURLForwardingEnsureValidForwardingEndpointInvalidProtocolInvalid(t *testing.T) {
    61  	invalid := &URL{
    62  		Kind: Kind_Forwarding,
    63  		Path: "tcp5:localhost:4420",
    64  	}
    65  	if invalid.EnsureValid() == nil {
    66  		t.Error("invalid URL classified as valid")
    67  	}
    68  }
    69  
    70  func TestURLEnsureValidLocalHostnameInvalid(t *testing.T) {
    71  	invalid := &URL{
    72  		Host: "somehost",
    73  		Path: "some/path",
    74  	}
    75  	if invalid.EnsureValid() == nil {
    76  		t.Error("invalid URL classified as valid")
    77  	}
    78  }
    79  
    80  func TestURLEnsureValidLocalPortInvalid(t *testing.T) {
    81  	invalid := &URL{
    82  		Port: 22,
    83  		Path: "some/path",
    84  	}
    85  	if invalid.EnsureValid() == nil {
    86  		t.Error("invalid URL classified as valid")
    87  	}
    88  }
    89  
    90  func TestURLEnsureValidLocalEmptyPathInvalid(t *testing.T) {
    91  	invalid := &URL{}
    92  	if invalid.EnsureValid() == nil {
    93  		t.Error("invalid URL classified as valid")
    94  	}
    95  }
    96  
    97  func TestURLEnsureValidLocalRelativePathInvalid(t *testing.T) {
    98  	invalid := &URL{
    99  		Path: "relative/path",
   100  	}
   101  	if invalid.EnsureValid() == nil {
   102  		t.Error("invalid URL classified as valid")
   103  	}
   104  }
   105  
   106  func TestURLEnsureValidLocalEnvironmentVariablesInvalid(t *testing.T) {
   107  	invalid := &URL{
   108  		Path: "some/path",
   109  		Environment: map[string]string{
   110  			"key": "value",
   111  		},
   112  	}
   113  	if invalid.EnsureValid() == nil {
   114  		t.Error("invalid URL classified as valid")
   115  	}
   116  }
   117  
   118  func TestURLEnsureValidLocal(t *testing.T) {
   119  	// Compute a normalized path.
   120  	normalized, err := filesystem.Normalize("/some/path")
   121  	if err != nil {
   122  		t.Fatal("unable to normalize path:", err)
   123  	}
   124  
   125  	// Create and validate the URL.
   126  	valid := &URL{Path: normalized}
   127  	if err := valid.EnsureValid(); err != nil {
   128  		t.Error("valid URL classified as invalid")
   129  	}
   130  }
   131  
   132  func TestURLEnsureValidForwardingLocalTCP(t *testing.T) {
   133  	valid := &URL{
   134  		Kind: Kind_Forwarding,
   135  		Path: "tcp:localhost:50505",
   136  	}
   137  	if err := valid.EnsureValid(); err != nil {
   138  		t.Error("valid URL classified as invalid")
   139  	}
   140  }
   141  
   142  func TestURLEnsureValidForwardingLocalUnixDomainSocket(t *testing.T) {
   143  	// Compute a normalized Unix domain socket path.
   144  	normalized, err := filesystem.Normalize("/socket/path.sock")
   145  	if err != nil {
   146  		t.Fatal("unable to normalize socket path:", err)
   147  	}
   148  
   149  	// Create and validate the URL.
   150  	valid := &URL{
   151  		Kind: Kind_Forwarding,
   152  		Path: "unix:" + normalized,
   153  	}
   154  	if err := valid.EnsureValid(); err != nil {
   155  		t.Error("valid URL classified as invalid")
   156  	}
   157  }
   158  
   159  func TestURLEnsureValidSSHEmptyHostnameInvalid(t *testing.T) {
   160  	invalid := &URL{
   161  		Protocol: Protocol_SSH,
   162  		Path:     "some/path",
   163  	}
   164  	if invalid.EnsureValid() == nil {
   165  		t.Error("invalid URL classified as valid")
   166  	}
   167  }
   168  
   169  func TestURLEnsureValidSSHLargePortInvalid(t *testing.T) {
   170  	invalid := &URL{
   171  		Protocol: Protocol_SSH,
   172  		Host:     "washington",
   173  		Port:     65536,
   174  		Path:     "some/path",
   175  	}
   176  	if invalid.EnsureValid() == nil {
   177  		t.Error("invalid URL classified as valid")
   178  	}
   179  }
   180  
   181  func TestURLEnsureValidSSHEmptyPathInvalid(t *testing.T) {
   182  	invalid := &URL{
   183  		Protocol: Protocol_SSH,
   184  	}
   185  	if invalid.EnsureValid() == nil {
   186  		t.Error("invalid URL classified as valid")
   187  	}
   188  }
   189  
   190  func TestURLEnsureValidSSHEnvironmentVariablesInvalid(t *testing.T) {
   191  	invalid := &URL{
   192  		Protocol: Protocol_SSH,
   193  		User:     "george",
   194  		Host:     "washington",
   195  		Port:     22,
   196  		Path:     "~/path",
   197  		Environment: map[string]string{
   198  			"key": "value",
   199  		},
   200  	}
   201  	if invalid.EnsureValid() == nil {
   202  		t.Error("invalid URL classified as valid")
   203  	}
   204  }
   205  
   206  func TestURLEnsureValidSSH(t *testing.T) {
   207  	valid := &URL{
   208  		Protocol: Protocol_SSH,
   209  		User:     "george",
   210  		Host:     "washington",
   211  		Port:     22,
   212  		Path:     "~/path",
   213  	}
   214  	if err := valid.EnsureValid(); err != nil {
   215  		t.Error("valid URL classified as invalid")
   216  	}
   217  }
   218  
   219  func TestURLEnsureValidDockerPortInvalid(t *testing.T) {
   220  	invalid := &URL{
   221  		Protocol: Protocol_Docker,
   222  		User:     "george",
   223  		Host:     "washington",
   224  		Port:     50,
   225  		Path:     "~/path",
   226  	}
   227  	if invalid.EnsureValid() == nil {
   228  		t.Error("invalid URL classified as valid")
   229  	}
   230  }
   231  
   232  func TestURLEnsureValidDockerEmptyPathInvalid(t *testing.T) {
   233  	invalid := &URL{
   234  		Protocol: Protocol_Docker,
   235  		User:     "george",
   236  		Host:     "washington",
   237  		Path:     "",
   238  	}
   239  	if invalid.EnsureValid() == nil {
   240  		t.Error("invalid URL classified as valid")
   241  	}
   242  }
   243  
   244  func TestURLEnsureValidDockerBadPathInvalid(t *testing.T) {
   245  	invalid := &URL{
   246  		Protocol: Protocol_Docker,
   247  		User:     "george",
   248  		Host:     "washington",
   249  		Path:     "$path",
   250  	}
   251  	if invalid.EnsureValid() == nil {
   252  		t.Error("invalid URL classified as valid")
   253  	}
   254  }
   255  
   256  func TestURLEnsureValidDockerHomeRelativePath(t *testing.T) {
   257  	valid := &URL{
   258  		Protocol: Protocol_Docker,
   259  		User:     "george",
   260  		Host:     "washington",
   261  		Path:     "~/path",
   262  	}
   263  	if err := valid.EnsureValid(); err != nil {
   264  		t.Error("valid URL classified as invalid")
   265  	}
   266  }
   267  
   268  func TestURLEnsureValidDockerUserRelativePath(t *testing.T) {
   269  	valid := &URL{
   270  		Protocol: Protocol_Docker,
   271  		User:     "george",
   272  		Host:     "washington",
   273  		Path:     "~otheruser/path",
   274  	}
   275  	if err := valid.EnsureValid(); err != nil {
   276  		t.Error("valid URL classified as invalid")
   277  	}
   278  }
   279  
   280  func TestURLEnsureValidDockerWindowsPath(t *testing.T) {
   281  	valid := &URL{
   282  		Protocol: Protocol_Docker,
   283  		User:     "george",
   284  		Host:     "washington",
   285  		Path:     `C:\path`,
   286  	}
   287  	if err := valid.EnsureValid(); err != nil {
   288  		t.Error("valid URL classified as invalid")
   289  	}
   290  }
   291  
   292  func TestURLEnsureValidDocker(t *testing.T) {
   293  	valid := &URL{
   294  		Protocol: Protocol_Docker,
   295  		User:     "george",
   296  		Host:     "washington",
   297  		Path:     "/path",
   298  	}
   299  	if err := valid.EnsureValid(); err != nil {
   300  		t.Error("valid URL classified as invalid")
   301  	}
   302  }