gateway: Reject endpoint pointing to local gateway (#4310)

Show an error when the user enters an endpoint url pointing
to the gateway server itself.
This commit is contained in:
Anis Elleuch
2017-05-17 06:13:29 +02:00
committed by Harshavardhana
parent 59b3e0b79b
commit 542f7ae42c
4 changed files with 212 additions and 11 deletions

View File

@@ -17,6 +17,7 @@
package cmd
import (
"errors"
"fmt"
"net"
"reflect"
@@ -240,3 +241,77 @@ func TestCheckLocalServerAddr(t *testing.T) {
}
}
}
func TestExtractHostPort(t *testing.T) {
testCases := []struct {
addr string
host string
port string
expectedErr error
}{
{"", "", "", errors.New("unable to process empty address")},
{"localhost", "localhost", "80", nil},
{"localhost:9000", "localhost", "9000", nil},
{"http://:9000/", "", "9000", nil},
{"http://8.8.8.8:9000/", "8.8.8.8", "9000", nil},
{"https://facebook.com:9000/", "facebook.com", "9000", nil},
}
for i, testCase := range testCases {
host, port, err := extractHostPort(testCase.addr)
if testCase.expectedErr == nil {
if err != nil {
t.Fatalf("Test %d: should succeed but failed with err: %v", i+1, err)
}
if host != testCase.host {
t.Fatalf("Test %d: expected: %v, found: %v", i+1, testCase.host, host)
}
if port != testCase.port {
t.Fatalf("Test %d: expected: %v, found: %v", i+1, testCase.port, port)
}
}
if testCase.expectedErr != nil {
if err == nil {
t.Fatalf("Test %d:, should fail but succeeded.", i+1)
}
if testCase.expectedErr.Error() != err.Error() {
t.Fatalf("Test %d: failed with different error, expected: '%v', found:'%v'.", i+1, testCase.expectedErr, err)
}
}
}
}
func TestSameLocalAddrs(t *testing.T) {
testCases := []struct {
addr1 string
addr2 string
sameAddr bool
expectedErr error
}{
{"", "", false, errors.New("unable to process empty address")},
{":9000", ":9000", true, nil},
{"localhost:9000", ":9000", true, nil},
{"localhost:9000", "http://localhost:9000", true, nil},
{"8.8.8.8:9000", "http://localhost:9000", false, nil},
}
for i, testCase := range testCases {
sameAddr, err := sameLocalAddrs(testCase.addr1, testCase.addr2)
if testCase.expectedErr != nil && err == nil {
t.Fatalf("Test %d: should fail but succeeded", i+1)
}
if testCase.expectedErr == nil && err != nil {
t.Fatalf("Test %d: should succeed but failed with %v", i+1, err)
}
if err == nil {
if sameAddr != testCase.sameAddr {
t.Fatalf("Test %d: expected: %v, found: %v", i+1, testCase.sameAddr, sameAddr)
}
} else {
if err.Error() != testCase.expectedErr.Error() {
t.Fatalf("Test %d: failed with different error, expected: '%v', found:'%v'.", i+1, testCase.expectedErr, err)
}
}
}
}