Feature: filter by hostname for Cyberghost servers
This commit is contained in:
@@ -29,11 +29,12 @@ func newCyberghost(servers []models.CyberghostServer, timeNow timeNowFunc) *cybe
|
||||
}
|
||||
}
|
||||
|
||||
func (c *cyberghost) filterServers(regions []string, group string) (servers []models.CyberghostServer) {
|
||||
func (c *cyberghost) filterServers(regions, hostnames []string, group string) (servers []models.CyberghostServer) {
|
||||
for _, server := range c.servers {
|
||||
switch {
|
||||
case len(group) > 0 && !strings.EqualFold(group, server.Group),
|
||||
filterByPossibilities(server.Region, regions):
|
||||
case group != "" && !strings.EqualFold(group, server.Group),
|
||||
filterByPossibilities(server.Region, regions),
|
||||
filterByPossibilities(server.Hostname, hostnames):
|
||||
default:
|
||||
servers = append(servers, server)
|
||||
}
|
||||
@@ -48,7 +49,7 @@ func (c *cyberghost) GetOpenVPNConnection(selection configuration.ServerSelectio
|
||||
return models.OpenVPNConnection{IP: selection.TargetIP, Port: httpsPort, Protocol: selection.Protocol}, nil
|
||||
}
|
||||
|
||||
servers := c.filterServers(selection.Regions, selection.Group)
|
||||
servers := c.filterServers(selection.Regions, selection.Hostnames, selection.Group)
|
||||
if len(servers) == 0 {
|
||||
return connection,
|
||||
fmt.Errorf("no server found for regions %s and group %q", commaJoin(selection.Regions), selection.Group)
|
||||
|
||||
@@ -12,6 +12,7 @@ func Test_cyberghost_filterServers(t *testing.T) {
|
||||
testCases := map[string]struct {
|
||||
servers []models.CyberghostServer
|
||||
regions []string
|
||||
hostnames []string
|
||||
group string
|
||||
filteredServers []models.CyberghostServer
|
||||
}{
|
||||
@@ -69,13 +70,25 @@ func Test_cyberghost_filterServers(t *testing.T) {
|
||||
{Region: "a", Group: "1"},
|
||||
},
|
||||
},
|
||||
"servers with hostnames filter": {
|
||||
servers: []models.CyberghostServer{
|
||||
{Hostname: "a"},
|
||||
{Hostname: "b"},
|
||||
{Hostname: "c"},
|
||||
},
|
||||
hostnames: []string{"a", "c"},
|
||||
filteredServers: []models.CyberghostServer{
|
||||
{Hostname: "a"},
|
||||
{Hostname: "c"},
|
||||
},
|
||||
},
|
||||
}
|
||||
for name, testCase := range testCases {
|
||||
testCase := testCase
|
||||
t.Run(name, func(t *testing.T) {
|
||||
t.Parallel()
|
||||
c := &cyberghost{servers: testCase.servers}
|
||||
filteredServers := c.filterServers(testCase.regions, testCase.group)
|
||||
filteredServers := c.filterServers(testCase.regions, testCase.hostnames, testCase.group)
|
||||
assert.Equal(t, testCase.filteredServers, filteredServers)
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user