I want to check the yaml syntax and test it with unit test. I create structures that are with the appropriate types, but the statement is always falid, I try to execute the following code, which failed constantly
This is the content of the barley, which is valid (possibly with a copy that it changed, but I was able to parse it correctly)
ID: demo version: 0.0.5 dep: - name: db path: mtb requires: - name: vi_db - name: srv path: srv1 properties: LOG_LEVEL: "info" parameters: mem: 12G requires: - name: db properties:
This is the test I created.
func Test_parseFile(t *testing.T) { yamlfile, err := ioutil.ReadFile("./testdata/file.yaml") type Properties map[string]string type Parameters map[string]interface{} type Modules struct { Name string Path string `yaml:"path,omitempty"` Requires []Requires `yaml:"requires,omitempty"` Properties Properties `yaml:"properties,omitempty"` } type Requires struct { Name string `yaml:"name,omitempty"` Properties Properties `yaml:"properties,omitempty"` } type args struct { contentFile []byte } tests := []struct { name string args args wantOut Properties wantNoTests bool wantErr bool }{ { name: "test", args: args{ contentFile: yamlfile, }, wantOut: Modules{ Name: "srv", Path: "srv1", Properties{ "LOG_LEVEL": "info", "DEBUG_LOG_LEVEL": "ALL", }, Parameters:{ "mem":"12G", }, Requires: { name: "db", Properties{ "CONFIG": '[tomcontext.xml: {"service_nameDB" : "~{con-name}"}]' }, }, }, wantNoTests: true, wantErr: true, }, }
This is a verification code.
for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { gotOut := ParseFile(tt.args.contentFile) if !reflect.DeepEqual(gotOut.Modules[1], tt.wantOut) { t.Errorf("parseFile() = %v, want %v", gotOut.Modules[2], tt.wantOut) }
Error:
parseFile() = map[], want map[LOG_LEVEL:info DEBUG_LOG_LEVEL:ALL]
How can I overcome it to check the properties of the module?
The ParseFile method is just err := yaml.Unmarshal([]byte(yamlFile), &yamlconent)