Feature: filter by hostname for Cyberghost servers

This commit is contained in:
Quentin McGaw
2021-05-08 19:05:11 +00:00
parent c0e4d805b1
commit a34769ae02
9 changed files with 182 additions and 121 deletions

View File

@@ -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)

View File

@@ -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)
})
}