(name string, t *testing.T)
| 171 | } |
| 172 | |
| 173 | func testConfig(name string, t *testing.T) { |
| 174 | wantedError := func() error { |
| 175 | slurp, err := os.ReadFile(strings.Replace(name, ".json", ".err", 1)) |
| 176 | if os.IsNotExist(err) { |
| 177 | return nil |
| 178 | } |
| 179 | if err != nil { |
| 180 | t.Fatalf("Error reading .err file: %v", err) |
| 181 | } |
| 182 | return errors.New(string(slurp)) |
| 183 | } |
| 184 | b, err := replaceRingPath(name) |
| 185 | if err != nil { |
| 186 | t.Fatalf("Could not read %s: %v", name, err) |
| 187 | } |
| 188 | b = backslashEscape(b) |
| 189 | var hiLevelConf serverconfig.Config |
| 190 | if err := json.Unmarshal(b, &hiLevelConf); err != nil { |
| 191 | t.Fatalf("Could not unmarshal %s into a serverconfig.Config: %v", name, err) |
| 192 | } |
| 193 | |
| 194 | lowLevelConf, err := serverinit.GenLowLevelConfig(&hiLevelConf) |
| 195 | if g, w := strings.TrimSpace(fmt.Sprint(err)), strings.TrimSpace(fmt.Sprint(wantedError())); g != w { |
| 196 | t.Fatalf("test %s: got GenLowLevelConfig error %q; want %q", name, g, w) |
| 197 | } |
| 198 | if err != nil { |
| 199 | return |
| 200 | } |
| 201 | if err := (&jsonconfig.ConfigParser{}).CheckTypes(lowLevelConf.Export_Obj()); err != nil { |
| 202 | t.Fatalf("Error while parsing low-level conf generated from %v: %v", name, err) |
| 203 | } |
| 204 | |
| 205 | // TODO(mpl): should we stop execution (and not update golden files) |
| 206 | // if the comparison fails? Currently this is not the case. |
| 207 | wantFile := strings.Replace(name, ".json", "-want.json", 1) |
| 208 | wantConf, err := configParser().ReadFile(wantFile) |
| 209 | if err != nil { |
| 210 | t.Fatalf("test %s: ReadFile: %v", name, err) |
| 211 | } |
| 212 | if *updateGolden { |
| 213 | contents, err := json.MarshalIndent(lowLevelConf.Export_Obj(), "", "\t") |
| 214 | if err != nil { |
| 215 | t.Fatal(err) |
| 216 | } |
| 217 | contents = canonicalizeGolden(t, contents) |
| 218 | if err := os.WriteFile(wantFile, contents, 0644); err != nil { |
| 219 | t.Fatal(err) |
| 220 | } |
| 221 | } |
| 222 | compareConfigurations(t, name, lowLevelConf.Export_Obj(), wantConf) |
| 223 | } |
| 224 | |
| 225 | func compareConfigurations(t *testing.T, name, g interface{}, w interface{}) { |
| 226 | var got, want bytes.Buffer |
no test coverage detected