Skip to content

Commit 9d59900

Browse files
giggsoffrvs
authored andcommitted
nested large tags fix and test
Signed-off-by: Petr Fedchenkov <giggsoff@gmail.com> (cherry picked from commit 05d76ab)
1 parent d36895c commit 9d59900

File tree

2 files changed

+104
-2
lines changed

2 files changed

+104
-2
lines changed

pkg/pillar/pubsub/large.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ func writeRemoveTree(log *base.LogObject,
7171
for k, v := range tree {
7272
if !strings.HasPrefix(k, tagLarge) {
7373
// descend into subtree if map
74-
tree1, ok := v.(jsonTree)
74+
tree1, ok := v.(map[string]interface{})
7575
if !ok {
7676
out[k] = v
7777
continue
@@ -195,7 +195,7 @@ func readAddTree(log *base.LogObject, tree jsonTree) (jsonTree, error) {
195195
for k, v := range tree {
196196
if !strings.HasPrefix(k, tagFile) {
197197
// descend into subtree if map
198-
tree1, ok := v.(jsonTree)
198+
tree1, ok := v.(map[string]interface{})
199199
if !ok {
200200
out[k] = v
201201
continue

pkg/pillar/pubsub/large_test.go

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
// Copyright (c) 2021 Zededa, Inc.
2+
// SPDX-License-Identifier: Apache-2.0
3+
4+
package pubsub
5+
6+
import (
7+
"encoding/json"
8+
"io/ioutil"
9+
"os"
10+
"reflect"
11+
"strings"
12+
"testing"
13+
14+
"github.com/lf-edge/eve/pkg/pillar/base"
15+
"github.com/sirupsen/logrus"
16+
)
17+
18+
type LargeNested struct {
19+
LargeNestedData []byte `json:"pubsub-large-LargeNestedData"`
20+
}
21+
22+
type LargeWithNested struct {
23+
LargeTop []byte `json:"pubsub-large-LargeTop"`
24+
LargeNested LargeNested
25+
}
26+
27+
func TestRemoveAndAddLarge(t *testing.T) {
28+
logger := logrus.StandardLogger()
29+
log := base.NewSourceLogObject(logger, "test", 1234)
30+
// Run in a unique directory
31+
rootPath, err := ioutil.TempDir("", "remove_large_test")
32+
if err != nil {
33+
t.Fatalf("TempDir failed: %s", err)
34+
}
35+
defer os.RemoveAll(rootPath)
36+
37+
originalObject := LargeWithNested{LargeNested: LargeNested{LargeNestedData: []byte{1}}, LargeTop: []byte{2}}
38+
39+
originb, err := json.Marshal(originalObject)
40+
if err != nil {
41+
t.Fatalf("cannot marshal %v: %s", originalObject, err)
42+
}
43+
originb, err = writeAndRemoveLarge(log, originb, rootPath)
44+
if err != nil {
45+
t.Fatal(err)
46+
}
47+
48+
newTree := jsonTree{}
49+
50+
err = json.Unmarshal(originb, &newTree)
51+
if err != nil {
52+
t.Fatal(err)
53+
}
54+
55+
largeTop, ok := newTree[tagFile+"LargeTop"]
56+
if !ok {
57+
t.Fatalf("cannot find LargeTop after writeAndRemoveLarge: %v", newTree)
58+
}
59+
largeTopString, isLargeTopString := largeTop.(string)
60+
if !isLargeTopString {
61+
t.Fatalf("LargeTop %T is not a string", largeTop)
62+
}
63+
if !strings.Contains(largeTopString, rootPath) {
64+
t.Errorf("cannot find directory (%s) in LargeTop %s", rootPath, largeTopString)
65+
}
66+
67+
largeNested, ok := newTree["LargeNested"]
68+
if !ok {
69+
t.Fatalf("cannot find LargeNested after writeAndRemoveLarge: %v", newTree)
70+
}
71+
largeNestedObj, isLargeNestedObjMap := largeNested.(map[string]interface{})
72+
if !isLargeNestedObjMap {
73+
t.Fatalf("LargeNested %T is not a map", largeNested)
74+
}
75+
largeNestedData, ok := largeNestedObj[tagFile+"LargeNestedData"]
76+
if !ok {
77+
t.Fatalf("cannot find %s after writeAndRemoveLarge: %v", tagFile+"LargeNestedData", largeNestedObj)
78+
}
79+
largeNestedDataString, isLargeNestedDataString := largeNestedData.(string)
80+
if !isLargeNestedDataString {
81+
t.Fatalf("%s %T is not a string", tagFile+"LargeNestedData", largeNestedData)
82+
}
83+
if !strings.Contains(largeNestedDataString, rootPath) {
84+
t.Errorf("cannot find directory (%s) in %s %s", rootPath, tagFile+"LargeNestedData", largeNestedDataString)
85+
}
86+
87+
originb, err = readAddLarge(log, originb)
88+
if err != nil {
89+
t.Fatal(err)
90+
}
91+
92+
newObject := LargeWithNested{}
93+
94+
err = json.Unmarshal(originb, &newObject)
95+
if err != nil {
96+
t.Fatal(err)
97+
}
98+
99+
if !reflect.DeepEqual(originalObject, newObject) {
100+
t.Fatalf("objects are not equal: %v %v", originalObject, newObject)
101+
}
102+
}

0 commit comments

Comments
 (0)