Skip to content
This repository was archived by the owner on Oct 20, 2024. It is now read-only.

Commit c7aeec0

Browse files
authored
chore: Removes individual header setting in IEs (#41)
1 parent 797353b commit c7aeec0

34 files changed

+218
-401
lines changed

ie/apply_action.go

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -193,23 +193,18 @@ func (applyaction ApplyAction) IsZeroValue() bool {
193193
return applyaction.Header.Length == 0
194194
}
195195

196-
func DeserializeApplyAction(ieHeader Header, ieValue []byte) (ApplyAction, error) {
197-
var applyaction ApplyAction
198-
199-
if ieHeader.Type != ApplyActionIEType {
200-
return applyaction, fmt.Errorf("invalid IE type: expected %d, got %d", ApplyActionIEType, ieHeader.Type)
201-
}
196+
func (applyaction ApplyAction) SetHeader(header Header) InformationElement {
197+
applyaction.Header = header
198+
return applyaction
199+
}
202200

203-
if ieHeader.Length != 2 {
204-
return applyaction, fmt.Errorf("invalid length field for ApplyAction: expected 2, got %d", ieHeader.Length)
205-
}
201+
func DeserializeApplyAction(ieValue []byte) (ApplyAction, error) {
202+
var applyaction ApplyAction
206203

207204
if len(ieValue) != 2 {
208-
return applyaction, fmt.Errorf("invalid length for ApplyAction: got %d bytes, want 2", len(ieValue))
205+
return ApplyAction{}, fmt.Errorf("invalid length for ApplyAction: got %d bytes, want 2", len(ieValue))
209206
}
210207

211-
applyaction.Header = ieHeader
212-
213208
// Deserialize the first byte (Octet 5)
214209
byte5 := ieValue[0]
215210
applyaction.DFRT = byte5&(1<<7) != 0

ie/apply_action_test.go

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -114,25 +114,12 @@ func TestGivenApplyActionSerializedWhenDeserializeThenFieldsSetCorrectly(t *test
114114

115115
serialized := applyAction.Serialize()
116116

117-
ieHeader := ie.Header{
118-
Type: 44,
119-
Length: 2,
120-
}
121-
122-
deserialized, err := ie.DeserializeApplyAction(ieHeader, serialized[4:])
117+
deserialized, err := ie.DeserializeApplyAction(serialized[4:])
123118

124119
if err != nil {
125120
t.Fatalf("Error deserializing ApplyAction: %v", err)
126121
}
127122

128-
if deserialized.Header.Type != 44 {
129-
t.Errorf("Expected IEType 44, got %d", deserialized.Header.Type)
130-
}
131-
132-
if deserialized.Header.Length != 2 {
133-
t.Errorf("Expected Length 2, got %d", deserialized.Header.Length)
134-
}
135-
136123
if deserialized.DFRT != false {
137124
t.Errorf("Expected no DFRT, got %v", deserialized.DFRT)
138125
}

ie/cause.go

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -65,15 +65,18 @@ func (cause Cause) IsZeroValue() bool {
6565
return cause.Value == 0
6666
}
6767

68-
func DeserializeCause(ieHeader Header, ieValue []byte) (Cause, error) {
69-
var cause Cause
68+
func (cause Cause) SetHeader(ieHeader Header) InformationElement {
69+
cause.Header = ieHeader
70+
return cause
71+
}
72+
73+
func DeserializeCause(ieValue []byte) (Cause, error) {
7074

7175
if len(ieValue) != 1 {
72-
return cause, fmt.Errorf("invalid length for Cause: got %d bytes, want 1", len(ieValue))
76+
return Cause{}, fmt.Errorf("invalid length for Cause: got %d bytes, want 1", len(ieValue))
7377
}
7478

7579
return Cause{
76-
Header: ieHeader,
77-
Value: CauseValue(ieValue[0]),
80+
Value: CauseValue(ieValue[0]),
7881
}, nil
7982
}

ie/create_far.go

Lines changed: 27 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -47,25 +47,28 @@ func (createfar CreateFAR) IsZeroValue() bool {
4747
return createfar.Header.Length == 0
4848
}
4949

50-
func DeserializeCreateFAR(ieHeader Header, value []byte) (CreateFAR, error) {
50+
func (createfar CreateFAR) SetHeader(header Header) InformationElement {
51+
createfar.Header = header
52+
return createfar
53+
}
54+
55+
func DeserializeCreateFAR(value []byte) (CreateFAR, error) {
5156
var createfar CreateFAR
5257

5358
if len(value) < HeaderLength {
54-
return createfar, fmt.Errorf("invalid length for CreateFAR: got %d bytes, want at least %d", len(value), HeaderLength)
59+
return CreateFAR{}, fmt.Errorf("invalid length for CreateFAR: got %d bytes, want at least %d", len(value), HeaderLength)
5560
}
5661

57-
createfar.Header = ieHeader
58-
5962
buffer := bytes.NewBuffer(value)
6063

6164
// Deserialize FARID
6265
if buffer.Len() < 2 {
63-
return createfar, fmt.Errorf("not enough data for FARID type")
66+
return CreateFAR{}, fmt.Errorf("not enough data for FARID type")
6467
}
6568
faridIEType := binary.BigEndian.Uint16(buffer.Next(2))
6669

6770
if buffer.Len() < 2 {
68-
return createfar, fmt.Errorf("not enough data for FARID length")
71+
return CreateFAR{}, fmt.Errorf("not enough data for FARID length")
6972
}
7073

7174
faridIELength := binary.BigEndian.Uint16(buffer.Next(2))
@@ -76,24 +79,29 @@ func DeserializeCreateFAR(ieHeader Header, value []byte) (CreateFAR, error) {
7679
Length: faridIELength,
7780
}
7881

79-
farid, err := DeserializeFARID(faridIEHEader, faridIEValue)
82+
tempFarid, err := DeserializeFARID(faridIEValue)
8083
if err != nil {
81-
return createfar, fmt.Errorf("failed to deserialize FARID: %v", err)
84+
return CreateFAR{}, fmt.Errorf("failed to deserialize FARID: %v", err)
85+
}
86+
farid, ok := tempFarid.SetHeader(faridIEHEader).(FARID)
87+
if !ok {
88+
return CreateFAR{}, fmt.Errorf("type assertion to FarID failed")
8289
}
90+
8391
createfar.FARID = farid
8492

8593
if buffer.Len() < 2 {
86-
return createfar, fmt.Errorf("not enough data for ApplyAction type")
94+
return CreateFAR{}, fmt.Errorf("not enough data for ApplyAction type")
8795
}
8896
applyactionIEType := binary.BigEndian.Uint16(buffer.Next(2))
8997

9098
if buffer.Len() < 2 {
91-
return createfar, fmt.Errorf("not enough data for ApplyAction length")
99+
return CreateFAR{}, fmt.Errorf("not enough data for ApplyAction length")
92100
}
93101
applyactionIELength := binary.BigEndian.Uint16(buffer.Next(2))
94102

95103
if buffer.Len() < int(applyactionIELength) {
96-
return createfar, fmt.Errorf("not enough data for ApplyAction value, expected %d, got %d", applyactionIELength, buffer.Len())
104+
return CreateFAR{}, fmt.Errorf("not enough data for ApplyAction value, expected %d, got %d", applyactionIELength, buffer.Len())
97105
}
98106
applyactionIEValue := buffer.Next(int(applyactionIELength))
99107

@@ -102,10 +110,16 @@ func DeserializeCreateFAR(ieHeader Header, value []byte) (CreateFAR, error) {
102110
Length: applyactionIELength,
103111
}
104112

105-
applyaction, err := DeserializeApplyAction(applyActionHeader, applyactionIEValue)
113+
tempApplyaction, err := DeserializeApplyAction(applyactionIEValue)
106114
if err != nil {
107-
return createfar, fmt.Errorf("failed to deserialize ApplyAction: %v", err)
115+
return CreateFAR{}, fmt.Errorf("failed to deserialize ApplyAction: %v", err)
116+
}
117+
118+
applyaction, ok := tempApplyaction.SetHeader(applyActionHeader).(ApplyAction)
119+
if !ok {
120+
return CreateFAR{}, fmt.Errorf("type assertion to ApplyAction failed")
108121
}
122+
109123
createfar.ApplyAction = applyaction
110124
return createfar, nil
111125
}

ie/create_far_test.go

Lines changed: 1 addition & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -26,14 +26,6 @@ func TestGivenCorrectValuesWhenNewFarThenFieldsSetCorrectly(t *testing.T) {
2626
t.Fatalf("Error creating CreateFAR: %v", err)
2727
}
2828

29-
if createFar.Header.Type != 3 {
30-
t.Errorf("Expected IEType 3, got %d", createFar.Header.Type)
31-
}
32-
33-
if createFar.Header.Length != 14 {
34-
t.Errorf("Expected Length 14, got %d", createFar.Header.Length)
35-
}
36-
3729
if createFar.FARID.Value != 1 {
3830
t.Errorf("Expected FARID 1, got %d", createFar.FARID.Value)
3931
}
@@ -113,25 +105,12 @@ func TestGivenSerializedWhenDeserializeCreateFarThenFieldsSetCorrectly(t *testin
113105

114106
serialized := createFar.Serialize()
115107

116-
ieHeader := ie.Header{
117-
Type: 3,
118-
Length: 14,
119-
}
120-
121-
deserialized, err := ie.DeserializeCreateFAR(ieHeader, serialized[4:])
108+
deserialized, err := ie.DeserializeCreateFAR(serialized[4:])
122109

123110
if err != nil {
124111
t.Fatalf("Error deserializing CreateFAR: %v", err)
125112
}
126113

127-
if deserialized.Header.Type != 3 {
128-
t.Errorf("Expected IEType 3, got %d", deserialized.Header.Type)
129-
}
130-
131-
if deserialized.Header.Length != 14 {
132-
t.Errorf("Expected Length 14, got %d", deserialized.Header.Length)
133-
}
134-
135114
if deserialized.FARID != farId {
136115
t.Errorf("Expected FARID %v, got %v", farId, deserialized.FARID)
137116
}

ie/create_pdr.go

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -53,9 +53,13 @@ func (createPDR CreatePDR) Serialize() []byte {
5353

5454
}
5555

56-
func DeserializeCreatePDR(ieHeader Header, value []byte) (CreatePDR, error) {
56+
func (createPDR CreatePDR) SetHeader(header Header) InformationElement {
57+
createPDR.Header = header
58+
return createPDR
59+
}
60+
61+
func DeserializeCreatePDR(value []byte) (CreatePDR, error) {
5762
createPDR := CreatePDR{
58-
Header: ieHeader,
5963
PDRID: PDRID{},
6064
Precedence: Precedence{},
6165
PDI: PDI{},
@@ -82,30 +86,43 @@ func DeserializeCreatePDR(ieHeader Header, value []byte) (CreatePDR, error) {
8286
Type: IEType(currentIEType),
8387
Length: currentIELength,
8488
}
85-
pdrID, err := DeserializePDRID(pdrIDHeader, currentIEValue)
89+
90+
tempPdrID, err := DeserializePDRID(currentIEValue)
8691
if err != nil {
8792
return CreatePDR{}, fmt.Errorf("failed to deserialize PDR ID: %v", err)
8893
}
94+
pdrID, ok := tempPdrID.SetHeader(pdrIDHeader).(PDRID)
95+
if !ok {
96+
return CreatePDR{}, fmt.Errorf("type assertion to PDRID failed")
97+
}
8998
createPDR.PDRID = pdrID
9099
case PrecedenceIEType:
91100
precedenceHeader := Header{
92101
Type: IEType(currentIEType),
93102
Length: currentIELength,
94103
}
95-
precedence, err := DeserializePrecedence(precedenceHeader, currentIEValue)
104+
tempPrecedence, err := DeserializePrecedence(currentIEValue)
96105
if err != nil {
97106
return CreatePDR{}, fmt.Errorf("failed to deserialize Precedence: %v", err)
98107
}
108+
precedence, ok := tempPrecedence.SetHeader(precedenceHeader).(Precedence)
109+
if !ok {
110+
return CreatePDR{}, fmt.Errorf("type assertion to Precedence failed")
111+
}
99112
createPDR.Precedence = precedence
100113
case PDIIEType:
101-
pdiIEHEader := Header{
114+
pdiIEHeader := Header{
102115
Type: IEType(currentIEType),
103116
Length: currentIELength,
104117
}
105-
pdi, err := DeserializePDI(pdiIEHEader, currentIEValue)
118+
tempPDI, err := DeserializePDI(currentIEValue)
106119
if err != nil {
107120
return CreatePDR{}, fmt.Errorf("failed to deserialize PDI: %v", err)
108121
}
122+
pdi, ok := tempPDI.SetHeader(pdiIEHeader).(PDI)
123+
if !ok {
124+
return CreatePDR{}, fmt.Errorf("type assertion to PDI failed")
125+
}
109126
createPDR.PDI = pdi
110127
}
111128

ie/create_pdr_test.go

Lines changed: 1 addition & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -41,14 +41,6 @@ func TestGivenCorrectParametersWhenNewCreatePDRThenFieldsSetCorrectly(t *testing
4141
t.Fatalf("Error creating CreatePDR: %v", err)
4242
}
4343

44-
if createPDR.Header.Type != 1 {
45-
t.Errorf("Expected CreatePDR IEType 1, got %d", createPDR.Header.Type)
46-
}
47-
48-
if createPDR.Header.Length != 29 {
49-
t.Errorf("Expected CreatePDR length 29, got %d", createPDR.Header.Length)
50-
}
51-
5244
if createPDR.PDRID != pdrID {
5345
t.Errorf("Expected CreatePDR PDRID %v, got %v", pdrID, createPDR.PDRID)
5446
}
@@ -145,25 +137,12 @@ func TestGivenSerializedWhenDeserializeCreatePDRThenFieldsSetCorrectly(t *testin
145137

146138
serialized := createPDR.Serialize()
147139

148-
ieHeader := ie.Header{
149-
Type: 1,
150-
Length: 17,
151-
}
152-
153-
deserialized, err := ie.DeserializeCreatePDR(ieHeader, serialized[4:])
140+
deserialized, err := ie.DeserializeCreatePDR(serialized[4:])
154141

155142
if err != nil {
156143
t.Fatalf("Error deserializing CreatePDR: %v", err)
157144
}
158145

159-
if deserialized.Header.Type != 1 {
160-
t.Errorf("Expected CreatePDR IEType 1, got %d", deserialized.Header.Type)
161-
}
162-
163-
if deserialized.Header.Length != 17 {
164-
t.Errorf("Expected CreatePDR length 17, got %d", deserialized.Header.Length)
165-
}
166-
167146
if deserialized.PDRID != pdrID {
168147
t.Errorf("Expected CreatePDR PDRID %v, got %v", pdrID, deserialized.PDRID)
169148
}

ie/farID.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -39,17 +39,17 @@ func (farID FARID) IsZeroValue() bool {
3939
return farID.Header.Length == 0
4040
}
4141

42-
func DeserializeFARID(ieHeader Header, ieValue []byte) (FARID, error) {
42+
func (farID FARID) SetHeader(header Header) InformationElement {
43+
farID.Header = header
44+
return farID
45+
}
46+
47+
func DeserializeFARID(ieValue []byte) (FARID, error) {
4348
if len(ieValue) != 4 {
4449
return FARID{}, fmt.Errorf("invalid length for FARID: got %d bytes, want 4", len(ieValue))
4550
}
4651

47-
if ieHeader.Type != FARIDIEType {
48-
return FARID{}, fmt.Errorf("invalid IE type for FARID: got %d, want %d", ieHeader.Type, FARIDIEType)
49-
}
50-
5152
return FARID{
52-
Header: ieHeader,
53-
Value: binary.BigEndian.Uint32(ieValue),
53+
Value: binary.BigEndian.Uint32(ieValue),
5454
}, nil
5555
}

ie/farID_test.go

Lines changed: 1 addition & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,6 @@ func TestGivenCorrectFarIDValueWhenNewFarIDThenFieldsSetCorrectly(t *testing.T)
1515
t.Fatalf("Expected no error, got %v", err)
1616
}
1717

18-
if farID.Header.Type != 108 {
19-
t.Errorf("Expected IEType %d, got %d", 108, farID.Header.Type)
20-
}
21-
22-
if farID.Header.Length != 4 {
23-
t.Errorf("Expected Length %d, got %d", 4, farID.Header.Length)
24-
}
25-
2618
if farID.Value != farIDValue {
2719
t.Errorf("Expected FarIDValue %d, got %d", farIDValue, farID.Value)
2820
}
@@ -38,24 +30,12 @@ func TestGivenFarIDSerializedWhenDeserializeThenFieldsSetCorrectly(t *testing.T)
3830

3931
farIDSerialized := farID.Serialize()
4032

41-
ieHeader := ie.Header{
42-
Type: 108,
43-
Length: 4,
44-
}
45-
deserializedFarID, err := ie.DeserializeFARID(ieHeader, farIDSerialized[4:])
33+
deserializedFarID, err := ie.DeserializeFARID(farIDSerialized[4:])
4634

4735
if err != nil {
4836
t.Fatalf("Expected no error, got %v", err)
4937
}
5038

51-
if deserializedFarID.Header.Type != 108 {
52-
t.Errorf("Expected IEType %d, got %d", 108, deserializedFarID.Header.Type)
53-
}
54-
55-
if deserializedFarID.Header.Length != 4 {
56-
t.Errorf("Expected Length %d, got %d", 4, deserializedFarID.Header.Length)
57-
}
58-
5939
if deserializedFarID.Value != farIDValue {
6040
t.Errorf("Expected FarIDValue %d, got %d", farIDValue, deserializedFarID.Value)
6141
}

0 commit comments

Comments
 (0)