|
@@ -1,6 +1,8 @@
|
|
|
package foodgroup
|
|
package foodgroup
|
|
|
|
|
|
|
|
import (
|
|
import (
|
|
|
|
|
+ "net"
|
|
|
|
|
+ "net/netip"
|
|
|
"testing"
|
|
"testing"
|
|
|
"time"
|
|
"time"
|
|
|
|
|
|
|
@@ -65,6 +67,7 @@ func TestICBMService_ChannelMsgToHost(t *testing.T) {
|
|
|
SubGroup: wire.ICBMChannelMsgToClient,
|
|
SubGroup: wire.ICBMChannelMsgToClient,
|
|
|
},
|
|
},
|
|
|
Body: wire.SNAC_0x04_0x07_ICBMChannelMsgToClient{
|
|
Body: wire.SNAC_0x04_0x07_ICBMChannelMsgToClient{
|
|
|
|
|
+ ChannelID: wire.ICBMChannelIM,
|
|
|
TLVUserInfo: newTestSession("sender-screen-name", sessOptWarning(10)).TLVUserInfo(),
|
|
TLVUserInfo: newTestSession("sender-screen-name", sessOptWarning(10)).TLVUserInfo(),
|
|
|
TLVRestBlock: wire.TLVRestBlock{
|
|
TLVRestBlock: wire.TLVRestBlock{
|
|
|
TLVList: wire.TLVList{
|
|
TLVList: wire.TLVList{
|
|
@@ -89,6 +92,7 @@ func TestICBMService_ChannelMsgToHost(t *testing.T) {
|
|
|
RequestID: 1234,
|
|
RequestID: 1234,
|
|
|
},
|
|
},
|
|
|
Body: wire.SNAC_0x04_0x06_ICBMChannelMsgToHost{
|
|
Body: wire.SNAC_0x04_0x06_ICBMChannelMsgToHost{
|
|
|
|
|
+ ChannelID: wire.ICBMChannelIM,
|
|
|
ScreenName: "recipient-screen-name",
|
|
ScreenName: "recipient-screen-name",
|
|
|
TLVRestBlock: wire.TLVRestBlock{
|
|
TLVRestBlock: wire.TLVRestBlock{
|
|
|
TLVList: wire.TLVList{
|
|
TLVList: wire.TLVList{
|
|
@@ -111,6 +115,7 @@ func TestICBMService_ChannelMsgToHost(t *testing.T) {
|
|
|
RequestID: 1234,
|
|
RequestID: 1234,
|
|
|
},
|
|
},
|
|
|
Body: wire.SNAC_0x04_0x0C_ICBMHostAck{
|
|
Body: wire.SNAC_0x04_0x0C_ICBMHostAck{
|
|
|
|
|
+ ChannelID: wire.ICBMChannelIM,
|
|
|
ScreenName: "recipient-screen-name",
|
|
ScreenName: "recipient-screen-name",
|
|
|
},
|
|
},
|
|
|
},
|
|
},
|
|
@@ -152,6 +157,7 @@ func TestICBMService_ChannelMsgToHost(t *testing.T) {
|
|
|
SubGroup: wire.ICBMChannelMsgToClient,
|
|
SubGroup: wire.ICBMChannelMsgToClient,
|
|
|
},
|
|
},
|
|
|
Body: wire.SNAC_0x04_0x07_ICBMChannelMsgToClient{
|
|
Body: wire.SNAC_0x04_0x07_ICBMChannelMsgToClient{
|
|
|
|
|
+ ChannelID: wire.ICBMChannelIM,
|
|
|
TLVUserInfo: newTestSession("sender-screen-name", sessOptWarning(10)).TLVUserInfo(),
|
|
TLVUserInfo: newTestSession("sender-screen-name", sessOptWarning(10)).TLVUserInfo(),
|
|
|
TLVRestBlock: wire.TLVRestBlock{
|
|
TLVRestBlock: wire.TLVRestBlock{
|
|
|
TLVList: wire.TLVList{
|
|
TLVList: wire.TLVList{
|
|
@@ -176,6 +182,7 @@ func TestICBMService_ChannelMsgToHost(t *testing.T) {
|
|
|
RequestID: 1234,
|
|
RequestID: 1234,
|
|
|
},
|
|
},
|
|
|
Body: wire.SNAC_0x04_0x06_ICBMChannelMsgToHost{
|
|
Body: wire.SNAC_0x04_0x06_ICBMChannelMsgToHost{
|
|
|
|
|
+ ChannelID: wire.ICBMChannelIM,
|
|
|
ScreenName: "recipient-screen-name",
|
|
ScreenName: "recipient-screen-name",
|
|
|
TLVRestBlock: wire.TLVRestBlock{
|
|
TLVRestBlock: wire.TLVRestBlock{
|
|
|
TLVList: wire.TLVList{
|
|
TLVList: wire.TLVList{
|
|
@@ -220,6 +227,7 @@ func TestICBMService_ChannelMsgToHost(t *testing.T) {
|
|
|
RequestID: 1234,
|
|
RequestID: 1234,
|
|
|
},
|
|
},
|
|
|
Body: wire.SNAC_0x04_0x06_ICBMChannelMsgToHost{
|
|
Body: wire.SNAC_0x04_0x06_ICBMChannelMsgToHost{
|
|
|
|
|
+ ChannelID: wire.ICBMChannelIM,
|
|
|
ScreenName: "recipient-screen-name",
|
|
ScreenName: "recipient-screen-name",
|
|
|
TLVRestBlock: wire.TLVRestBlock{
|
|
TLVRestBlock: wire.TLVRestBlock{
|
|
|
TLVList: wire.TLVList{
|
|
TLVList: wire.TLVList{
|
|
@@ -273,6 +281,7 @@ func TestICBMService_ChannelMsgToHost(t *testing.T) {
|
|
|
RequestID: 1234,
|
|
RequestID: 1234,
|
|
|
},
|
|
},
|
|
|
Body: wire.SNAC_0x04_0x06_ICBMChannelMsgToHost{
|
|
Body: wire.SNAC_0x04_0x06_ICBMChannelMsgToHost{
|
|
|
|
|
+ ChannelID: wire.ICBMChannelIM,
|
|
|
ScreenName: "recipient-screen-name",
|
|
ScreenName: "recipient-screen-name",
|
|
|
TLVRestBlock: wire.TLVRestBlock{
|
|
TLVRestBlock: wire.TLVRestBlock{
|
|
|
TLVList: wire.TLVList{
|
|
TLVList: wire.TLVList{
|
|
@@ -331,6 +340,7 @@ func TestICBMService_ChannelMsgToHost(t *testing.T) {
|
|
|
RequestID: 1234,
|
|
RequestID: 1234,
|
|
|
},
|
|
},
|
|
|
Body: wire.SNAC_0x04_0x06_ICBMChannelMsgToHost{
|
|
Body: wire.SNAC_0x04_0x06_ICBMChannelMsgToHost{
|
|
|
|
|
+ ChannelID: wire.ICBMChannelIM,
|
|
|
ScreenName: "recipient-screen-name",
|
|
ScreenName: "recipient-screen-name",
|
|
|
TLVRestBlock: wire.TLVRestBlock{
|
|
TLVRestBlock: wire.TLVRestBlock{
|
|
|
TLVList: wire.TLVList{
|
|
TLVList: wire.TLVList{
|
|
@@ -361,6 +371,7 @@ func TestICBMService_ChannelMsgToHost(t *testing.T) {
|
|
|
RequestID: 1234,
|
|
RequestID: 1234,
|
|
|
},
|
|
},
|
|
|
Body: wire.SNAC_0x04_0x06_ICBMChannelMsgToHost{
|
|
Body: wire.SNAC_0x04_0x06_ICBMChannelMsgToHost{
|
|
|
|
|
+ ChannelID: wire.ICBMChannelIM,
|
|
|
ScreenName: "22222222",
|
|
ScreenName: "22222222",
|
|
|
TLVRestBlock: wire.TLVRestBlock{
|
|
TLVRestBlock: wire.TLVRestBlock{
|
|
|
TLVList: wire.TLVList{
|
|
TLVList: wire.TLVList{
|
|
@@ -415,6 +426,7 @@ func TestICBMService_ChannelMsgToHost(t *testing.T) {
|
|
|
{
|
|
{
|
|
|
offlineMessageIn: state.OfflineMessage{
|
|
offlineMessageIn: state.OfflineMessage{
|
|
|
Message: wire.SNAC_0x04_0x06_ICBMChannelMsgToHost{
|
|
Message: wire.SNAC_0x04_0x06_ICBMChannelMsgToHost{
|
|
|
|
|
+ ChannelID: wire.ICBMChannelIM,
|
|
|
ScreenName: "22222222",
|
|
ScreenName: "22222222",
|
|
|
TLVRestBlock: wire.TLVRestBlock{
|
|
TLVRestBlock: wire.TLVRestBlock{
|
|
|
TLVList: wire.TLVList{
|
|
TLVList: wire.TLVList{
|
|
@@ -432,6 +444,252 @@ func TestICBMService_ChannelMsgToHost(t *testing.T) {
|
|
|
},
|
|
},
|
|
|
},
|
|
},
|
|
|
},
|
|
},
|
|
|
|
|
+ {
|
|
|
|
|
+ name: "send rendezvous request for file transfer, expect IP TLV override",
|
|
|
|
|
+ senderSession: newTestSession("sender-screen-name", sessOptWarning(10),
|
|
|
|
|
+ sessRemoteAddr(netip.AddrPortFrom(netip.MustParseAddr("129.168.0.1"), 0))),
|
|
|
|
|
+ mockParams: mockParams{
|
|
|
|
|
+ buddyListRetrieverParams: buddyListRetrieverParams{
|
|
|
|
|
+ relationshipParams: relationshipParams{
|
|
|
|
|
+ {
|
|
|
|
|
+ me: state.NewIdentScreenName("sender-screen-name"),
|
|
|
|
|
+ them: state.NewIdentScreenName("recipient-screen-name"),
|
|
|
|
|
+ result: state.Relationship{
|
|
|
|
|
+ User: state.NewIdentScreenName("recipient-screen-name"),
|
|
|
|
|
+ BlocksYou: false,
|
|
|
|
|
+ YouBlock: false,
|
|
|
|
|
+ IsOnTheirList: false,
|
|
|
|
|
+ IsOnYourList: false,
|
|
|
|
|
+ },
|
|
|
|
|
+ },
|
|
|
|
|
+ },
|
|
|
|
|
+ },
|
|
|
|
|
+ sessionRetrieverParams: sessionRetrieverParams{
|
|
|
|
|
+ retrieveSessionParams{
|
|
|
|
|
+ {
|
|
|
|
|
+ screenName: state.NewIdentScreenName("recipient-screen-name"),
|
|
|
|
|
+ result: newTestSession("recipient-screen-name", sessOptWarning(20)),
|
|
|
|
|
+ },
|
|
|
|
|
+ },
|
|
|
|
|
+ },
|
|
|
|
|
+ messageRelayerParams: messageRelayerParams{
|
|
|
|
|
+ relayToScreenNameParams: relayToScreenNameParams{
|
|
|
|
|
+ {
|
|
|
|
|
+ screenName: state.NewIdentScreenName("recipient-screen-name"),
|
|
|
|
|
+ message: wire.SNACMessage{
|
|
|
|
|
+ Frame: wire.SNACFrame{
|
|
|
|
|
+ FoodGroup: wire.ICBM,
|
|
|
|
|
+ SubGroup: wire.ICBMChannelMsgToClient,
|
|
|
|
|
+ },
|
|
|
|
|
+ Body: wire.SNAC_0x04_0x07_ICBMChannelMsgToClient{
|
|
|
|
|
+ ChannelID: wire.ICBMChannelRendezvous,
|
|
|
|
|
+ TLVUserInfo: newTestSession("sender-screen-name", sessOptWarning(10)).TLVUserInfo(),
|
|
|
|
|
+ TLVRestBlock: wire.TLVRestBlock{
|
|
|
|
|
+ TLVList: wire.TLVList{
|
|
|
|
|
+ wire.NewTLVBE(wire.ICBMTLVWantEvents, []byte{}),
|
|
|
|
|
+ wire.NewTLVBE(wire.ICBMTLVData, wire.ICBMCh2Fragment{
|
|
|
|
|
+ Type: wire.ICBMRdvMessagePropose,
|
|
|
|
|
+ Capability: wire.CapFileTransfer,
|
|
|
|
|
+ TLVRestBlock: wire.TLVRestBlock{
|
|
|
|
|
+ TLVList: wire.TLVList{
|
|
|
|
|
+ wire.NewTLVBE(wire.ICBMRdvTLVTagsPort, uint16(4000)),
|
|
|
|
|
+ wire.NewTLVBE(wire.ICBMRdvTLVTagsRequesterIP, net.ParseIP("129.168.0.1").To4()),
|
|
|
|
|
+ wire.NewTLVBE(wire.ICBMRdvTLVTagsVerifiedIP, net.ParseIP("129.168.0.1").To4()),
|
|
|
|
|
+ },
|
|
|
|
|
+ },
|
|
|
|
|
+ }),
|
|
|
|
|
+ },
|
|
|
|
|
+ },
|
|
|
|
|
+ },
|
|
|
|
|
+ },
|
|
|
|
|
+ },
|
|
|
|
|
+ },
|
|
|
|
|
+ },
|
|
|
|
|
+ },
|
|
|
|
|
+ inputSNAC: wire.SNACMessage{
|
|
|
|
|
+ Frame: wire.SNACFrame{
|
|
|
|
|
+ RequestID: 1234,
|
|
|
|
|
+ },
|
|
|
|
|
+ Body: wire.SNAC_0x04_0x06_ICBMChannelMsgToHost{
|
|
|
|
|
+ ChannelID: wire.ICBMChannelRendezvous,
|
|
|
|
|
+ ScreenName: "recipient-screen-name",
|
|
|
|
|
+ TLVRestBlock: wire.TLVRestBlock{
|
|
|
|
|
+ TLVList: wire.TLVList{
|
|
|
|
|
+ wire.NewTLVBE(wire.ICBMTLVData, wire.ICBMCh2Fragment{
|
|
|
|
|
+ Type: wire.ICBMRdvMessagePropose,
|
|
|
|
|
+ Capability: wire.CapFileTransfer,
|
|
|
|
|
+ TLVRestBlock: wire.TLVRestBlock{
|
|
|
|
|
+ TLVList: wire.TLVList{
|
|
|
|
|
+ wire.NewTLVBE(wire.ICBMRdvTLVTagsPort, uint16(4000)),
|
|
|
|
|
+ wire.NewTLVBE(wire.ICBMRdvTLVTagsRequesterIP, net.ParseIP("127.0.0.1").To4()),
|
|
|
|
|
+ },
|
|
|
|
|
+ },
|
|
|
|
|
+ }),
|
|
|
|
|
+ },
|
|
|
|
|
+ },
|
|
|
|
|
+ },
|
|
|
|
|
+ },
|
|
|
|
|
+ expectOutput: nil,
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ name: "send rendezvous rejection for file transfer, expect no IP TLV override",
|
|
|
|
|
+ senderSession: newTestSession("sender-screen-name", sessOptWarning(10),
|
|
|
|
|
+ sessRemoteAddr(netip.AddrPortFrom(netip.MustParseAddr("129.168.0.1"), 0))),
|
|
|
|
|
+ mockParams: mockParams{
|
|
|
|
|
+ buddyListRetrieverParams: buddyListRetrieverParams{
|
|
|
|
|
+ relationshipParams: relationshipParams{
|
|
|
|
|
+ {
|
|
|
|
|
+ me: state.NewIdentScreenName("sender-screen-name"),
|
|
|
|
|
+ them: state.NewIdentScreenName("recipient-screen-name"),
|
|
|
|
|
+ result: state.Relationship{
|
|
|
|
|
+ User: state.NewIdentScreenName("recipient-screen-name"),
|
|
|
|
|
+ BlocksYou: false,
|
|
|
|
|
+ YouBlock: false,
|
|
|
|
|
+ IsOnTheirList: false,
|
|
|
|
|
+ IsOnYourList: false,
|
|
|
|
|
+ },
|
|
|
|
|
+ },
|
|
|
|
|
+ },
|
|
|
|
|
+ },
|
|
|
|
|
+ sessionRetrieverParams: sessionRetrieverParams{
|
|
|
|
|
+ retrieveSessionParams{
|
|
|
|
|
+ {
|
|
|
|
|
+ screenName: state.NewIdentScreenName("recipient-screen-name"),
|
|
|
|
|
+ result: newTestSession("recipient-screen-name", sessOptWarning(20)),
|
|
|
|
|
+ },
|
|
|
|
|
+ },
|
|
|
|
|
+ },
|
|
|
|
|
+ messageRelayerParams: messageRelayerParams{
|
|
|
|
|
+ relayToScreenNameParams: relayToScreenNameParams{
|
|
|
|
|
+ {
|
|
|
|
|
+ screenName: state.NewIdentScreenName("recipient-screen-name"),
|
|
|
|
|
+ message: wire.SNACMessage{
|
|
|
|
|
+ Frame: wire.SNACFrame{
|
|
|
|
|
+ FoodGroup: wire.ICBM,
|
|
|
|
|
+ SubGroup: wire.ICBMChannelMsgToClient,
|
|
|
|
|
+ },
|
|
|
|
|
+ Body: wire.SNAC_0x04_0x07_ICBMChannelMsgToClient{
|
|
|
|
|
+ ChannelID: wire.ICBMChannelRendezvous,
|
|
|
|
|
+ TLVUserInfo: newTestSession("sender-screen-name", sessOptWarning(10)).TLVUserInfo(),
|
|
|
|
|
+ TLVRestBlock: wire.TLVRestBlock{
|
|
|
|
|
+ TLVList: wire.TLVList{
|
|
|
|
|
+ wire.NewTLVBE(wire.ICBMTLVWantEvents, []byte{}),
|
|
|
|
|
+ wire.NewTLVBE(wire.ICBMTLVData, wire.ICBMCh2Fragment{
|
|
|
|
|
+ Type: wire.ICBMRdvMessageCancel,
|
|
|
|
|
+ Capability: wire.CapFileTransfer,
|
|
|
|
|
+ }),
|
|
|
|
|
+ },
|
|
|
|
|
+ },
|
|
|
|
|
+ },
|
|
|
|
|
+ },
|
|
|
|
|
+ },
|
|
|
|
|
+ },
|
|
|
|
|
+ },
|
|
|
|
|
+ },
|
|
|
|
|
+ inputSNAC: wire.SNACMessage{
|
|
|
|
|
+ Frame: wire.SNACFrame{
|
|
|
|
|
+ RequestID: 1234,
|
|
|
|
|
+ },
|
|
|
|
|
+ Body: wire.SNAC_0x04_0x06_ICBMChannelMsgToHost{
|
|
|
|
|
+ ChannelID: wire.ICBMChannelRendezvous,
|
|
|
|
|
+ ScreenName: "recipient-screen-name",
|
|
|
|
|
+ TLVRestBlock: wire.TLVRestBlock{
|
|
|
|
|
+ TLVList: wire.TLVList{
|
|
|
|
|
+ wire.NewTLVBE(wire.ICBMTLVData, wire.ICBMCh2Fragment{
|
|
|
|
|
+ Type: wire.ICBMRdvMessageCancel,
|
|
|
|
|
+ Capability: wire.CapFileTransfer,
|
|
|
|
|
+ }),
|
|
|
|
|
+ },
|
|
|
|
|
+ },
|
|
|
|
|
+ },
|
|
|
|
|
+ },
|
|
|
|
|
+ expectOutput: nil,
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ name: "send rendezvous request for file transfer without IP in session, expect no IP TLV override",
|
|
|
|
|
+ senderSession: newTestSession("sender-screen-name", sessOptWarning(10)),
|
|
|
|
|
+ mockParams: mockParams{
|
|
|
|
|
+ buddyListRetrieverParams: buddyListRetrieverParams{
|
|
|
|
|
+ relationshipParams: relationshipParams{
|
|
|
|
|
+ {
|
|
|
|
|
+ me: state.NewIdentScreenName("sender-screen-name"),
|
|
|
|
|
+ them: state.NewIdentScreenName("recipient-screen-name"),
|
|
|
|
|
+ result: state.Relationship{
|
|
|
|
|
+ User: state.NewIdentScreenName("recipient-screen-name"),
|
|
|
|
|
+ BlocksYou: false,
|
|
|
|
|
+ YouBlock: false,
|
|
|
|
|
+ IsOnTheirList: false,
|
|
|
|
|
+ IsOnYourList: false,
|
|
|
|
|
+ },
|
|
|
|
|
+ },
|
|
|
|
|
+ },
|
|
|
|
|
+ },
|
|
|
|
|
+ sessionRetrieverParams: sessionRetrieverParams{
|
|
|
|
|
+ retrieveSessionParams{
|
|
|
|
|
+ {
|
|
|
|
|
+ screenName: state.NewIdentScreenName("recipient-screen-name"),
|
|
|
|
|
+ result: newTestSession("recipient-screen-name", sessOptWarning(20)),
|
|
|
|
|
+ },
|
|
|
|
|
+ },
|
|
|
|
|
+ },
|
|
|
|
|
+ messageRelayerParams: messageRelayerParams{
|
|
|
|
|
+ relayToScreenNameParams: relayToScreenNameParams{
|
|
|
|
|
+ {
|
|
|
|
|
+ screenName: state.NewIdentScreenName("recipient-screen-name"),
|
|
|
|
|
+ message: wire.SNACMessage{
|
|
|
|
|
+ Frame: wire.SNACFrame{
|
|
|
|
|
+ FoodGroup: wire.ICBM,
|
|
|
|
|
+ SubGroup: wire.ICBMChannelMsgToClient,
|
|
|
|
|
+ },
|
|
|
|
|
+ Body: wire.SNAC_0x04_0x07_ICBMChannelMsgToClient{
|
|
|
|
|
+ ChannelID: wire.ICBMChannelRendezvous,
|
|
|
|
|
+ TLVUserInfo: newTestSession("sender-screen-name", sessOptWarning(10)).TLVUserInfo(),
|
|
|
|
|
+ TLVRestBlock: wire.TLVRestBlock{
|
|
|
|
|
+ TLVList: wire.TLVList{
|
|
|
|
|
+ wire.NewTLVBE(wire.ICBMTLVWantEvents, []byte{}),
|
|
|
|
|
+ wire.NewTLVBE(wire.ICBMTLVData, wire.ICBMCh2Fragment{
|
|
|
|
|
+ Type: wire.ICBMRdvMessagePropose,
|
|
|
|
|
+ Capability: wire.CapFileTransfer,
|
|
|
|
|
+ TLVRestBlock: wire.TLVRestBlock{
|
|
|
|
|
+ TLVList: wire.TLVList{
|
|
|
|
|
+ wire.NewTLVBE(wire.ICBMRdvTLVTagsPort, uint16(4000)),
|
|
|
|
|
+ wire.NewTLVBE(wire.ICBMRdvTLVTagsRequesterIP, net.ParseIP("127.0.0.1").To4()),
|
|
|
|
|
+ },
|
|
|
|
|
+ },
|
|
|
|
|
+ }),
|
|
|
|
|
+ },
|
|
|
|
|
+ },
|
|
|
|
|
+ },
|
|
|
|
|
+ },
|
|
|
|
|
+ },
|
|
|
|
|
+ },
|
|
|
|
|
+ },
|
|
|
|
|
+ },
|
|
|
|
|
+ inputSNAC: wire.SNACMessage{
|
|
|
|
|
+ Frame: wire.SNACFrame{
|
|
|
|
|
+ RequestID: 1234,
|
|
|
|
|
+ },
|
|
|
|
|
+ Body: wire.SNAC_0x04_0x06_ICBMChannelMsgToHost{
|
|
|
|
|
+ ChannelID: wire.ICBMChannelRendezvous,
|
|
|
|
|
+ ScreenName: "recipient-screen-name",
|
|
|
|
|
+ TLVRestBlock: wire.TLVRestBlock{
|
|
|
|
|
+ TLVList: wire.TLVList{
|
|
|
|
|
+ wire.NewTLVBE(wire.ICBMTLVData, wire.ICBMCh2Fragment{
|
|
|
|
|
+ Type: wire.ICBMRdvMessagePropose,
|
|
|
|
|
+ Capability: wire.CapFileTransfer,
|
|
|
|
|
+ TLVRestBlock: wire.TLVRestBlock{
|
|
|
|
|
+ TLVList: wire.TLVList{
|
|
|
|
|
+ wire.NewTLVBE(wire.ICBMRdvTLVTagsPort, uint16(4000)),
|
|
|
|
|
+ wire.NewTLVBE(wire.ICBMRdvTLVTagsRequesterIP, net.ParseIP("127.0.0.1").To4()),
|
|
|
|
|
+ },
|
|
|
|
|
+ },
|
|
|
|
|
+ }),
|
|
|
|
|
+ },
|
|
|
|
|
+ },
|
|
|
|
|
+ },
|
|
|
|
|
+ },
|
|
|
|
|
+ expectOutput: nil,
|
|
|
|
|
+ },
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
for _, tc := range cases {
|
|
for _, tc := range cases {
|