33package proxy
44
55import (
6+ "fmt"
67 "testing"
78
89 "github.com/eko/monday/pkg/hostfile"
@@ -29,7 +30,7 @@ func TestNewProxy(t *testing.T) {
2930
3031 assert .Len (t , p .ProxyForwards , 0 )
3132 assert .Equal (t , p .latestPort , "9400" )
32- assert .Equal (t , p .ipLastByte , 1 )
33+ assert .Equal (t , p .ipLastByte , byte ( 1 ) )
3334}
3435
3536func TestAddProxyForward (t * testing.T ) {
@@ -53,7 +54,7 @@ func TestAddProxyForward(t *testing.T) {
5354 // Then
5455 assert .Len (t , proxy .ProxyForwards , 1 )
5556 assert .Equal (t , proxy .latestPort , "9401" )
56- assert .Equal (t , proxy .ipLastByte , 2 )
57+ assert .Equal (t , proxy .ipLastByte , byte ( 2 ) )
5758}
5859
5960func TestAddProxyForwardWhenMultiple (t * testing.T ) {
@@ -120,5 +121,75 @@ func TestListen(t *testing.T) {
120121
121122 assert .Len (t , proxy .ProxyForwards , 1 )
122123 assert .Equal (t , proxy .latestPort , "9401" )
123- assert .Equal (t , proxy .ipLastByte , 2 )
124+ assert .Equal (t , proxy .ipLastByte , byte (2 ))
125+ }
126+
127+ func TestGetNextIPAddress (t * testing.T ) {
128+ testCases := []struct {
129+ a byte
130+ b byte
131+ c byte
132+ d byte
133+
134+ expectedA byte
135+ expectedB byte
136+ expectedC byte
137+ expectedD byte
138+ }{
139+ { // Case incrementing d
140+ a : 127 , b : 0 , c : 0 , d : 1 ,
141+ expectedA : 127 , expectedB : 0 , expectedC : 0 , expectedD : 2 ,
142+ },
143+ { // Case incrementing d to last byte
144+ a : 127 , b : 0 , c : 0 , d : 254 ,
145+ expectedA : 127 , expectedB : 0 , expectedC : 0 , expectedD : 255 ,
146+ },
147+ { // Case incrementing c and reset d to 1
148+ a : 127 , b : 0 , c : 0 , d : 255 ,
149+ expectedA : 127 , expectedB : 0 , expectedC : 1 , expectedD : 1 ,
150+ },
151+ { // Case incrementing d to last byte
152+ a : 127 , b : 0 , c : 1 , d : 254 ,
153+ expectedA : 127 , expectedB : 0 , expectedC : 1 , expectedD : 255 ,
154+ },
155+ { // Case incrementing c and reset d to 1
156+ a : 127 , b : 0 , c : 1 , d : 255 ,
157+ expectedA : 127 , expectedB : 0 , expectedC : 2 , expectedD : 1 ,
158+ },
159+ { // Case incrementing d to last byte
160+ a : 127 , b : 0 , c : 254 , d : 254 ,
161+ expectedA : 127 , expectedB : 0 , expectedC : 254 , expectedD : 255 ,
162+ },
163+ { // Case incrementing c and reset d to 1
164+ a : 127 , b : 0 , c : 254 , d : 255 ,
165+ expectedA : 127 , expectedB : 0 , expectedC : 255 , expectedD : 1 ,
166+ },
167+ { // Case incrementing d to last byte when c is already on latest byte
168+ a : 127 , b : 0 , c : 255 , d : 254 ,
169+ expectedA : 127 , expectedB : 0 , expectedC : 255 , expectedD : 255 ,
170+ },
171+ { // Case incrementing b and reset c and d to last byte
172+ a : 127 , b : 0 , c : 255 , d : 255 ,
173+ expectedA : 127 , expectedB : 1 , expectedC : 1 , expectedD : 1 ,
174+ },
175+ { // Case incrementing d to last byte when b and c are already on latest byte
176+ a : 127 , b : 255 , c : 255 , d : 254 ,
177+ expectedA : 127 , expectedB : 255 , expectedC : 255 , expectedD : 255 ,
178+ },
179+ { // Reached max level
180+ a : 127 , b : 255 , c : 255 , d : 255 ,
181+ expectedA : 127 , expectedB : 255 , expectedC : 255 , expectedD : 255 ,
182+ },
183+ }
184+
185+ for i , testCase := range testCases {
186+ t .Run (fmt .Sprintf ("Case %d" , i ), func (t * testing.T ) {
187+ a , b , c , d := getNextIPAddress (testCase .a , testCase .b , testCase .c , testCase .d )
188+
189+ assert .Equal (t , testCase .expectedA , a )
190+ assert .Equal (t , testCase .expectedB , b )
191+ assert .Equal (t , testCase .expectedC , c )
192+ assert .Equal (t , testCase .expectedD , d )
193+ })
194+ }
124195}
0 commit comments