@@ -34,6 +34,16 @@ func Test_getDuration(t *testing.T) {
3434}
3535
3636func Test_readPortsRange (t * testing.T ) {
37+ reservedPorts := make ([]int , 1023 )
38+ for i := range 1023 {
39+ reservedPorts [i ] = i + 1
40+ }
41+
42+ allPorts := make ([]int , 65535 )
43+ for i := range 65535 {
44+ allPorts [i ] = i + 1
45+ }
46+
3747 tests := []struct {
3848 name string
3949 ranges string
@@ -45,7 +55,29 @@ func Test_readPortsRange(t *testing.T) {
4555 {name : "hyphen" , ranges : "22-25" , want : []int {22 , 23 , 24 , 25 }, wantErr : false },
4656 {name : "comma and hyphen" , ranges : "22,30-32" , want : []int {22 , 30 , 31 , 32 }, wantErr : false },
4757 {name : "comma, hyphen, comma" , ranges : "22,30-32,50" , want : []int {22 , 30 , 31 , 32 , 50 }, wantErr : false },
48- {name : "unknown" , ranges : "foobar" , wantErr : true },
58+
59+ // Tests for keywords
60+ {name : "keyword all" , ranges : "all" , want : allPorts , wantErr : false },
61+ {name : "keyword reserved" , ranges : "reserved" , want : reservedPorts , wantErr : false },
62+ {name : "keyword top1000" , ranges : "top1000" , want : top1000Ports , wantErr : false },
63+
64+ // Tests for combinations and uniqueness
65+ {name : "duplicates" , ranges : "80,81,443,79-88" , want : []int {79 , 80 , 81 , 82 , 83 , 84 , 85 , 86 , 87 , 88 , 443 }, wantErr : false },
66+ {name : "reserved with duplicates" , ranges : "1,2,reserved" , want : reservedPorts , wantErr : false },
67+ {name : "all with others" , ranges : "80,all,9000" , want : allPorts , wantErr : false },
68+
69+ // Tests for edge cases
70+ {name : "empty string" , ranges : "" , want : []int {}, wantErr : false },
71+ {name : "whitespace and commas" , ranges : " , " , want : []int {}, wantErr : false },
72+
73+ // Tests for error conditions
74+ {name : "unknown keyword" , ranges : "foobar" , wantErr : true },
75+ {name : "invalid range min > max" , ranges : "100-20" , wantErr : true },
76+ {name : "port > 65535" , ranges : "65536" , wantErr : true },
77+ {name : "port < 1" , ranges : "0" , wantErr : true },
78+ {name : "range end > 65535" , ranges : "65530-65536" , wantErr : true },
79+ {name : "malformed range end" , ranges : "100-" , wantErr : true },
80+ {name : "malformed range start" , ranges : "-100" , wantErr : true },
4981 }
5082 for _ , tt := range tests {
5183 t .Run (tt .name , func (t * testing.T ) {
0 commit comments