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 }