blob: 53cddd5e53f697af5a35ba9bba48822679eda2e6 [file] [log] [blame]
// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package config_validator
import (
"config"
"config_parser"
"fmt"
)
func ValidateProjectConfigs(configs []config_parser.ProjectConfig) error {
for _, c := range configs {
if err := validateProjectConfig(&c); err != nil {
return err
}
}
return nil
}
func validateProjectConfig(c *config_parser.ProjectConfig) (err error) {
if c.CobaltVersion == config_parser.CobaltVersion0 {
return fmt.Errorf("Cobalt version 0.1 configs are no longer supported")
}
if err = validateConfiguredMetricDefinitions(c.ProjectConfig.MetricDefinitions); err != nil {
return fmt.Errorf("Error in configuration for project %s: %v", c.ProjectName, err)
}
if err = validateReplacementMetricSaturation(c.ProjectConfig.MetricDefinitions); err != nil {
return fmt.Errorf("Error in configuration for project %s: %v", c.ProjectName, err)
}
return nil
}
func validateReplacementMetricSaturation(metrics []*config.MetricDefinition) (err error) {
hasAnyReplacementMetrics := false
hasAllReplacementMetrics := true
metricsMissingReplacement := []string{}
for _, m := range metrics {
if m.ReplacementMetricId != 0 || m.NoReplacementMetric != "" {
hasAnyReplacementMetrics = true
} else if !config_parser.Cobalt11MetricTypesSet[m.MetricType] {
hasAllReplacementMetrics = false
metricsMissingReplacement = append(metricsMissingReplacement, m.MetricName)
}
}
if hasAnyReplacementMetrics && !hasAllReplacementMetrics {
return fmt.Errorf("the following metrics do not include replacement_metric_id or no_replacement_metric: %v", metricsMissingReplacement)
}
return nil
}