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

Commit 759588a

Browse files
committed
Fix string json unmarshal, add test coverage
1 parent f91fe8c commit 759588a

File tree

2 files changed

+41
-1
lines changed

2 files changed

+41
-1
lines changed

router/types/forward.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package types
22

33
import (
4+
"encoding/json"
45
"fmt"
56
"time"
67

@@ -62,7 +63,13 @@ func (o *JSONObject) UnmarshalJSON(b []byte) error {
6263
if err := o.orderedMap.UnmarshalJSON(b); err != nil {
6364
// If ordered map unmarshal fails, this is a primitive value
6465
o.obj = false
65-
o.primitive = b
66+
// Attempt to unmarshal as string, this removes extra JSON escaping
67+
var primitiveStr string
68+
if err := json.Unmarshal(b, &primitiveStr); err != nil {
69+
o.primitive = b
70+
return nil
71+
}
72+
o.primitive = []byte(primitiveStr)
6673
return nil
6774
}
6875
// This is a JSON object, now stored as an ordered map to retain key order.

router/types/forward_test.go

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package types_test
2+
3+
import (
4+
"encoding/json"
5+
"testing"
6+
7+
"github.com/strangelove-ventures/packet-forward-middleware/v4/router/types"
8+
"github.com/stretchr/testify/require"
9+
)
10+
11+
func TestForwardMetadataUnmarshalStringNext(t *testing.T) {
12+
const memo = "{\"forward\":{\"receiver\":\"noble1f4cur2krsua2th9kkp7n0zje4stea4p9tu70u8\",\"port\":\"transfer\",\"channel\":\"channel-0\",\"timeout\":0,\"next\":\"{\\\"forward\\\":{\\\"receiver\\\":\\\"noble1l505zhahp24v5jsmps9vs5asah759fdce06sfp\\\",\\\"port\\\":\\\"transfer\\\",\\\"channel\\\":\\\"channel-0\\\",\\\"timeout\\\":0}}\"}}"
13+
var packetMetadata types.PacketMetadata
14+
15+
err := json.Unmarshal([]byte(memo), &packetMetadata)
16+
require.NoError(t, err)
17+
18+
nextBz, err := json.Marshal(packetMetadata.Forward.Next)
19+
require.NoError(t, err)
20+
require.Equal(t, `{"forward":{"receiver":"noble1l505zhahp24v5jsmps9vs5asah759fdce06sfp","port":"transfer","channel":"channel-0","timeout":0}}`, string(nextBz))
21+
}
22+
23+
func TestForwardMetadataUnmarshalJSONNext(t *testing.T) {
24+
const memo = "{\"forward\":{\"receiver\":\"noble1f4cur2krsua2th9kkp7n0zje4stea4p9tu70u8\",\"port\":\"transfer\",\"channel\":\"channel-0\",\"timeout\":0,\"next\":{\"forward\":{\"receiver\":\"noble1l505zhahp24v5jsmps9vs5asah759fdce06sfp\",\"port\":\"transfer\",\"channel\":\"channel-0\",\"timeout\":0}}}}"
25+
var packetMetadata types.PacketMetadata
26+
27+
err := json.Unmarshal([]byte(memo), &packetMetadata)
28+
require.NoError(t, err)
29+
30+
nextBz, err := json.Marshal(packetMetadata.Forward.Next)
31+
require.NoError(t, err)
32+
require.Equal(t, `{"forward":{"receiver":"noble1l505zhahp24v5jsmps9vs5asah759fdce06sfp","port":"transfer","channel":"channel-0","timeout":0}}`, string(nextBz))
33+
}

0 commit comments

Comments
 (0)