This is an automated email from the ASF dual-hosted git repository.

hoshea pushed a commit to branch verifier/action
in repository https://gitbox.apache.org/repos/asf/skywalking-infra-e2e.git


The following commit(s) were added to refs/heads/verifier/action by this push:
     new 33edd4a  Polish code and add a unit test
33edd4a is described below

commit 33edd4a648c34927d2dc85f99293338397cfa1fd
Author: Hoshea <[email protected]>
AuthorDate: Mon Mar 1 17:03:06 2021 +0800

    Polish code and add a unit test
---
 internal/components/verifier/verifier_test.go | 134 ++++++++++++++++++++++++++
 test/verify/2.actual.yaml                     |   4 +-
 test/verify/2.expected.yaml                   |   2 +-
 third-party/go/template/exec.go               |  25 ++---
 4 files changed, 151 insertions(+), 14 deletions(-)

diff --git a/internal/components/verifier/verifier_test.go 
b/internal/components/verifier/verifier_test.go
new file mode 100644
index 0000000..544b969
--- /dev/null
+++ b/internal/components/verifier/verifier_test.go
@@ -0,0 +1,134 @@
+package verifier
+
+import "testing"
+
+func TestVerify(t *testing.T) {
+       type args struct {
+               actualData       string
+               expectedTemplate string
+       }
+       tests := []struct {
+               name    string
+               args    args
+               wantErr bool
+               err     error
+       }{
+               {
+                       name: "should contain two elements",
+                       args: args{
+                               actualData: `
+metrics:
+  - name: business-zone::projectA
+    id: YnVzaW5lc3Mtem9uZTo6cHJvamVjdEE=.1
+    value: 1
+  - name: system::load balancer1
+    id: c3lzdGVtOjpsb2FkIGJhbGFuY2VyMQ==.1
+    value: 0
+  - name: system::load balancer2
+    id: WW91cl9BcHBsaWNhdGlvbk5hbWU=.1
+    value: 2
+`,
+                               expectedTemplate: `
+metrics:
+{{- contains .metrics }}
+  - name: {{ notEmpty .name }}
+    id: {{ notEmpty .id }}
+    value: {{ gt .value 0 }}
+  - name: {{ notEmpty .name }}
+    id: {{ notEmpty .id }}
+    value: {{ gt .value 1 }}
+{{- end }}
+`,
+                       },
+                       wantErr: false,
+               },
+               {
+                       name: "fail to contain two elements",
+                       args: args{
+                               actualData: `
+metrics:
+  - name: business-zone::projectA
+    id: YnVzaW5lc3Mtem9uZTo6cHJvamVjdEE=.1
+    value: 1
+  - name: system::load balancer1
+    id: c3lzdGVtOjpsb2FkIGJhbGFuY2VyMQ==.1
+    value: 0
+  - name: system::load balancer2
+    id: WW91cl9BcHBsaWNhdGlvbk5hbWU=.1
+    value: 1
+`,
+                               expectedTemplate: `
+metrics:
+{{- contains .metrics }}
+  - name: {{ notEmpty .name }}
+    id: {{ notEmpty .id }}
+    value: {{ gt .value 0 }}
+  - name: {{ notEmpty .name }}
+    id: {{ notEmpty .id }}
+    value: {{ gt .value 1 }}
+{{- end }}
+`,
+                       },
+                       wantErr: true,
+               },
+               {
+                       name: "should contain one element",
+                       args: args{
+                               actualData: `
+metrics:
+  - name: business-zone::projectA
+    id: YnVzaW5lc3Mtem9uZTo6cHJvamVjdEE=.1
+    value: 1
+  - name: system::load balancer1
+    id: c3lzdGVtOjpsb2FkIGJhbGFuY2VyMQ==.1
+    value: 0
+  - name: system::load balancer2
+    id: WW91cl9BcHBsaWNhdGlvbk5hbWU=.1
+    value: 2
+`,
+                               expectedTemplate: `
+metrics:
+{{- contains .metrics }}
+  - name: {{ notEmpty .name }}
+    id: {{ notEmpty .id }}
+    value: {{ gt .value 1 }}
+{{- end }}
+`,
+                       },
+                       wantErr: false,
+               },
+               {
+                       name: "fail to contain one element",
+                       args: args{
+                               actualData: `
+metrics:
+  - name: business-zone::projectA
+    id: YnVzaW5lc3Mtem9uZTo6cHJvamVjdEE=.1
+    value: 1
+  - name: system::load balancer1
+    id: c3lzdGVtOjpsb2FkIGJhbGFuY2VyMQ==.1
+    value: 0
+  - name: system::load balancer2
+    id: WW91cl9BcHBsaWNhdGlvbk5hbWU=.1
+    value: 2
+`,
+                               expectedTemplate: `
+metrics:
+{{- contains .metrics }}
+  - name: {{ notEmpty .name }}
+    id: {{ notEmpty .id }}
+    value: {{ gt .value 3 }}
+{{- end }}
+`,
+                       },
+                       wantErr: true,
+               },
+       }
+       for _, tt := range tests {
+               t.Run(tt.name, func(t *testing.T) {
+                       if err := verify(tt.args.actualData, 
tt.args.expectedTemplate); (err != nil) != tt.wantErr {
+                               t.Errorf("verify() error = %v, wantErr %v", 
err, tt.wantErr)
+                       }
+               })
+       }
+}
diff --git a/test/verify/2.actual.yaml b/test/verify/2.actual.yaml
index cf3357d..bbe0eb1 100644
--- a/test/verify/2.actual.yaml
+++ b/test/verify/2.actual.yaml
@@ -6,5 +6,5 @@ metrics:
     id: c3lzdGVtOjpsb2FkIGJhbGFuY2VyMQ==.1
     value: 0
   - name: system::load balancer2
-    id: c3lzdGVtOjpsb2FkIGJhbGFuY2VyMg==.1
-    value: 1
+    id: WW91cl9BcHBsaWNhdGlvbk5hbWU=.1
+    value: 2
diff --git a/test/verify/2.expected.yaml b/test/verify/2.expected.yaml
index a296c04..6fdf7f8 100644
--- a/test/verify/2.expected.yaml
+++ b/test/verify/2.expected.yaml
@@ -5,5 +5,5 @@ metrics:
     value: {{ gt .value 0 }}
   - name: {{ notEmpty .name }}
     id: {{ notEmpty .id }}
-    value: {{ gt .value 2 }}
+    value: {{ gt .value 1 }}
 {{- end }}
diff --git a/third-party/go/template/exec.go b/third-party/go/template/exec.go
index b6b2067..0d88f70 100644
--- a/third-party/go/template/exec.go
+++ b/third-party/go/template/exec.go
@@ -437,24 +437,27 @@ func (s *state) walkContains(dot reflect.Value, r 
*parse.ContainsNode) {
                if val.Len() == 0 {
                        break
                }
-               match := make(map[int]int) // the matched pair of indices 
<actual index>:<expected index>
-               actualSize := 0
+               expectedSize := 0
+               // matched stores the matched pair of indices <expected index>: 
<actual index>
+               matched := make(map[int]int)
                output := make([]interface{}, val.Len())
                for i := 0; i < val.Len(); i++ {
-                       actualArr := oneIteration(reflect.ValueOf(i), 
val.Index(i))
-                       actualSize = len(actualArr)
-                       for j, actual := range actualArr {
-                               value, _ := printableValue(val.Index(i))
-                               if fmt.Sprint(value) == fmt.Sprint(actual) {
-                                       match[j] = i
-                                       output[i] = value // if rule matches
-                               } else {
+                       expectedArr := oneIteration(reflect.ValueOf(i), 
val.Index(i))
+                       // expectedSize is the number of elements that the 
actual array should contain.
+                       expectedSize = len(expectedArr)
+                       actual, _ := printableValue(val.Index(i))
+                       for j, expected := range expectedArr {
+                               if fmt.Sprint(actual) == fmt.Sprint(expected) {
+                                       matched[j] = i
                                        output[i] = actual
+                               } else {
+                                       output[i] = expected
                                }
                        }
                }
+
                var marshal []byte
-               if len(match) == actualSize {
+               if len(matched) == expectedSize {
                        value, _ := printableValue(val)
                        marshal, _ = yaml.Marshal(value)
                } else {

Reply via email to