Skip to content

Commit

Permalink
lib/options: BlacklistIP text encoding
Browse files Browse the repository at this point in the history
The BlacklistIP configuration uses the CIDR notation.
Implemented the TextMarshaler interface to support correct
encoding based on the notation.
  • Loading branch information
codebien committed Jul 9, 2021
1 parent aa1fd6a commit 2b8be74
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 7 deletions.
9 changes: 6 additions & 3 deletions lib/options.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,9 @@ import (
"reflect"
"strconv"

"gopkg.in/guregu/null.v3"

"go.k6.io/k6/lib/types"
"go.k6.io/k6/stats"
"gopkg.in/guregu/null.v3"
)

// DefaultScenarioName is used as the default key/ID of the scenario config entries
Expand Down Expand Up @@ -178,10 +177,14 @@ func (ipnet *IPNet) UnmarshalText(b []byte) error {
}

*ipnet = *newIPNet

return nil
}

// MarshalText encodes the IPNet representation using CIDR notation.
func (ipnet *IPNet) MarshalText() ([]byte, error) {
return []byte(ipnet.String()), nil
}

// HostAddress stores information about IP and port
// for a host.
type HostAddress net.TCPAddr
Expand Down
21 changes: 17 additions & 4 deletions lib/options_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -307,15 +307,28 @@ func TestOptions(t *testing.T) {
opts := Options{}.Apply(Options{
BlacklistIPs: []*IPNet{{
IPNet: net.IPNet{
IP: net.IPv4zero,
Mask: net.CIDRMask(1, 1),
IP: net.IPv4bcast,
Mask: net.CIDRMask(31, 32),
},
}},
})
assert.NotNil(t, opts.BlacklistIPs)
assert.NotEmpty(t, opts.BlacklistIPs)
assert.Equal(t, net.IPv4zero, opts.BlacklistIPs[0].IP)
assert.Equal(t, net.CIDRMask(1, 1), opts.BlacklistIPs[0].Mask)
assert.Equal(t, net.IPv4bcast, opts.BlacklistIPs[0].IP)
assert.Equal(t, net.CIDRMask(31, 32), opts.BlacklistIPs[0].Mask)

t.Run("JSON", func(t *testing.T) {
t.Parallel()

b, err := json.Marshal(opts)
require.NoError(t, err)

var uopts Options
err = json.Unmarshal(b, &uopts)
require.NoError(t, err)
require.Len(t, uopts.BlacklistIPs, 1)
require.Equal(t, "255.255.255.254/31", uopts.BlacklistIPs[0].String())
})
})
t.Run("BlockedHostnames", func(t *testing.T) {
blockedHostnames, err := types.NewNullHostnameTrie([]string{"test.k6.io", "*valid.pattern"})
Expand Down

0 comments on commit 2b8be74

Please sign in to comment.