Skip to content

Commit

Permalink
Add the possibility to change the addressRange maxLen with options.
Browse files Browse the repository at this point in the history
  • Loading branch information
Justin BOUDT committed Mar 4, 2024
1 parent 3c44160 commit 4c5acde
Show file tree
Hide file tree
Showing 2 changed files with 84 additions and 17 deletions.
38 changes: 28 additions & 10 deletions pdu/AddressRange.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,28 +11,38 @@ type AddressRange struct {
ton byte
npi byte
addressRange string
maxLen int
}

// NewAddressRange create new AddressRange with default max length.
func NewAddressRange() AddressRange {
return AddressRange{ton: data.GetDefaultTon(), npi: data.GetDefaultNpi()}
func NewAddressRange(opts ...addressRangeOptions) AddressRange {
a := AddressRange{ton: data.GetDefaultTon(), npi: data.GetDefaultNpi(), maxLen: data.SM_ADDR_RANGE_LEN}
for _, opt := range opts {
opt(&a)
}
return a
}

// NewAddressRangeWithAddr create new AddressRange.
func NewAddressRangeWithAddr(addr string) (a AddressRange, err error) {
a = NewAddressRange()
func NewAddressRangeWithAddr(addr string, opts ...addressRangeOptions) (a AddressRange, err error) {
a = NewAddressRange(opts...)
err = a.SetAddressRange(addr)
return
}

// NewAddressRangeWithTonNpi create new AddressRange with ton, npi.
func NewAddressRangeWithTonNpi(ton, npi byte) AddressRange {
return AddressRange{ton: ton, npi: npi}
func NewAddressRangeWithTonNpi(ton, npi byte, opts ...addressRangeOptions) AddressRange {
a := NewAddressRange(opts...)
a.SetTon(ton)
a.SetNpi(npi)
return a
}

// NewAddressRangeWithTonNpiAddr returns new address with ton, npi, addr string.
func NewAddressRangeWithTonNpiAddr(ton, npi byte, addr string) (a AddressRange, err error) {
a = NewAddressRangeWithTonNpi(ton, npi)
func NewAddressRangeWithTonNpiAddr(ton, npi byte, addr string, opts ...addressRangeOptions) (a AddressRange, err error) {
a = NewAddressRange(opts...)
a.SetTon(ton)
a.SetNpi(npi)
err = a.SetAddressRange(addr)
return
}
Expand All @@ -58,8 +68,8 @@ func (c *AddressRange) Marshal(b *ByteBuffer) {

// SetAddressRange sets address range.
func (c *AddressRange) SetAddressRange(addr string) (err error) {
if len(addr) > data.SM_ADDR_RANGE_LEN {
err = fmt.Errorf("Address len exceed limit. (%d > %d)", len(addr), data.SM_ADDR_RANGE_LEN)
if len(addr) > c.maxLen {
err = fmt.Errorf("Address len exceed limit. (%d > %d)", len(addr), c.maxLen)
} else {
c.addressRange = addr
}
Expand Down Expand Up @@ -90,3 +100,11 @@ func (c *AddressRange) Ton() byte {
func (c *AddressRange) Npi() byte {
return c.npi
}

type addressRangeOptions func(a *AddressRange)

func WithMaxLen(maxLen int) addressRangeOptions {
return func(a *AddressRange) {
a.maxLen = maxLen
}
}
63 changes: 56 additions & 7 deletions pdu/AddressRange_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,17 +8,40 @@ import (

func TestAddressRange(t *testing.T) {
t.Run("new", func(t *testing.T) {
a, err := NewAddressRangeWithAddr("abc")
require.Nil(t, err)
require.Equal(t, "abc", a.AddressRange())
a := NewAddressRange()
require.Equal(t, uint8(0x0), a.Ton())
require.Equal(t, uint8(0x0), a.Npi())
})

t.Run("newWithOpts", func(t *testing.T) {
a := NewAddressRange(WithMaxLen(100))
require.Equal(t, uint8(0x0), a.Ton())
require.Equal(t, uint8(0x0), a.Npi())
require.Equal(t, 100, a.maxLen)
})

t.Run("newWithAddr", func(t *testing.T) {
_, err := NewAddressRangeWithAddr("12345678901234567890121234567890123456789012")
require.NotNil(t, err)
a, err := NewAddressRangeWithAddr("12345678901234567890121234567890123456789")
require.NoError(t, err)
require.Equal(t, "12345678901234567890121234567890123456789", a.AddressRange())

})

t.Run("newTonNpi", func(t *testing.T) {
t.Run("newWithAddr_ErrorMaxLen", func(t *testing.T) {
_, err := NewAddressRangeWithAddr("123456789012345678901212345678901234567890123456")
require.Error(t, err)
require.EqualError(t, err, "Address len exceed limit. (48 > 41)")

})

t.Run("newWithAddrAndOpts", func(t *testing.T) {
a, err := NewAddressRangeWithAddr("123456789012345678901212345678901234567890123456789123456789", WithMaxLen(100))
require.NoError(t, err)
require.Equal(t, "123456789012345678901212345678901234567890123456789123456789", a.AddressRange())
require.Equal(t, 100, a.maxLen)
})

t.Run("newWithTonNpi", func(t *testing.T) {
a := NewAddressRangeWithTonNpi(3, 7)
require.Nil(t, a.SetAddressRange("123456789"))
require.EqualValues(t, 3, a.Ton())
Expand All @@ -30,7 +53,20 @@ func TestAddressRange(t *testing.T) {
require.EqualValues(t, 19, a.Npi())
})

t.Run("newTonNpiAddr", func(t *testing.T) {
t.Run("newWithTonNpiOpts", func(t *testing.T) {
a := NewAddressRangeWithTonNpi(3, 7, WithMaxLen(100))
require.Nil(t, a.SetAddressRange("123456789"))
require.EqualValues(t, 3, a.Ton())
require.EqualValues(t, 7, a.Npi())
require.Equal(t, "123456789", a.AddressRange())
require.Equal(t, 100, a.maxLen)
a.SetTon(11)
a.SetNpi(19)
require.EqualValues(t, 11, a.Ton())
require.EqualValues(t, 19, a.Npi())
})

t.Run("newWithTonNpiAddr", func(t *testing.T) {
a, err := NewAddressRangeWithTonNpiAddr(3, 7, "123456789")
require.Nil(t, err)
require.EqualValues(t, 3, a.Ton())
Expand All @@ -42,6 +78,19 @@ func TestAddressRange(t *testing.T) {
require.EqualValues(t, 19, a.Npi())
})

t.Run("newWithTonNpiAddrOpts", func(t *testing.T) {
a, err := NewAddressRangeWithTonNpiAddr(3, 7, "123456789", WithMaxLen(100))
require.Nil(t, err)
require.EqualValues(t, 3, a.Ton())
require.EqualValues(t, 7, a.Npi())
require.Equal(t, "123456789", a.AddressRange())
require.Equal(t, 100, a.maxLen)
a.SetTon(11)
a.SetNpi(19)
require.EqualValues(t, 11, a.Ton())
require.EqualValues(t, 19, a.Npi())
})

t.Run("unmarshal", func(t *testing.T) {
buf := NewBuffer(fromHex("315b7068616e746f6d537472696b6500"))
var a AddressRange
Expand Down

0 comments on commit 4c5acde

Please sign in to comment.