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  }