github.com/lirm/aeron-go@v0.0.0-20230415210743-920325491dc4/aeron/channeluri_test.go (about) 1 package aeron 2 3 import ( 4 "testing" 5 6 "github.com/stretchr/testify/assert" 7 ) 8 9 func TestChannelUri(t *testing.T) { 10 assert := assert.New(t) 11 12 assertParseWithMedia(assert, "aeron:udp", "udp") 13 assertParseWithMedia(assert, "aeron:ipc", "ipc") 14 assertParseWithMedia(assert, "aeron:", "") 15 assertParseWithMediaAndPrefix(assert, "aeron-spy:aeron:ipc", "aeron-spy", "ipc") 16 } 17 18 func TestShouldRejectUriWithoutAeronPrefix(t *testing.T) { 19 assert := assert.New(t) 20 assertInvalid(assert, ":udp") 21 assertInvalid(assert, "aeron") 22 assertInvalid(assert, "aron:") 23 assertInvalid(assert, "eeron:") 24 } 25 26 func TestShouldRejectWithOutOfPlaceColon(t *testing.T) { 27 assert := assert.New(t) 28 assertInvalid(assert, "aeron:udp:") 29 } 30 31 func TestShouldParseWithMultipleParameters(t *testing.T) { 32 assert := assert.New(t) 33 assertParseWithParams( 34 assert, 35 "aeron:udp?endpoint=224.10.9.8|port=4567|interface=199.168.0.3|ttl=16", 36 "endpoint", "224.10.9.8", 37 "port", "4567", 38 "interface", "199.168.0.3", 39 "ttl", "16") 40 } 41 42 func TestShouldRoundTripToString(t *testing.T) { 43 assert := assert.New(t) 44 45 assertRoundTrip(assert, "aeron:udp?endpoint=224.10.9.8:777") 46 assertRoundTrip(assert, "aeron-spy:aeron:udp?control=224.10.9.8:777") 47 } 48 49 func TestCloneShouldRoundTripToString(t *testing.T) { 50 assert := assert.New(t) 51 52 assertCloneRoundTrip(assert, "aeron:udp?endpoint=224.10.9.8:777") 53 assertCloneRoundTrip(assert, "aeron-spy:aeron:udp?control=224.10.9.8:777") 54 assertCloneRoundTrip(assert, "aeron:udp?endpoint=224.10.9.8|interface=199.168.0.3|port=4567|ttl=16") 55 } 56 57 func assertRoundTrip(assert *assert.Assertions, uriString string) { 58 uri, err := ParseChannelUri(uriString) 59 assert.NoError(err) 60 assert.EqualValues(uriString, uri.String()) 61 } 62 63 func assertCloneRoundTrip(assert *assert.Assertions, uriString string) { 64 uri, err := ParseChannelUri(uriString) 65 assert.NoError(err) 66 assert.EqualValues(uriString, uri.Clone().String()) 67 } 68 69 func assertParseWithParams(assert *assert.Assertions, uriString string, params ...string) { 70 uri, err := ParseChannelUri(uriString) 71 assert.NoError(err) 72 if len(params)%2 != 0 { 73 panic("must be key=value params") 74 } 75 for i := 0; i < len(params); i += 2 { 76 assert.EqualValues(uri.Get(params[i]), params[i+1]) 77 } 78 } 79 80 func assertInvalid(assert *assert.Assertions, uriString string) { 81 _, err := ParseChannelUri(uriString) 82 assert.Error(err) 83 } 84 85 func assertParseWithMediaAndPrefix(assert *assert.Assertions, uriString string, prefix string, media string) { 86 uri, err := ParseChannelUri(uriString) 87 assert.NoError(err) 88 assert.EqualValues(uri.Scheme(), "aeron") 89 assert.EqualValues(uri.Prefix(), prefix) 90 assert.EqualValues(uri.Media(), media) 91 } 92 93 func assertParseWithMedia(assert *assert.Assertions, uriString string, media string) { 94 assertParseWithMediaAndPrefix(assert, uriString, "", media) 95 }