aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2021-02-04 10:39:56 +0100
committerDmitry Vyukov <dvyukov@google.com>2021-02-04 11:36:11 +0100
commitba6b139d53eaf7b853e8544c17da7d4d57fefe33 (patch)
tree1f20f41a142f2c526aebe31965a683876a9394ae
parent5efd806bff55547b71420e7322c2e3d6f4f9ed5d (diff)
syz-ci: reduce cyclomatic complexity of loadConfig
-rw-r--r--syz-ci/syz-ci.go102
1 files changed, 54 insertions, 48 deletions
diff --git a/syz-ci/syz-ci.go b/syz-ci/syz-ci.go
index 053b5ee03..29e74a24a 100644
--- a/syz-ci/syz-ci.go
+++ b/syz-ci/syz-ci.go
@@ -290,59 +290,14 @@ func loadConfig(filename string) (*Config, error) {
cfg.SyzkallerDescriptions = osutil.Abs(cfg.SyzkallerDescriptions)
cfg.BisectBinDir = osutil.Abs(cfg.BisectBinDir)
cfg.Ccache = osutil.Abs(cfg.Ccache)
- // Manager name must not contain dots because it is used as GCE image name prefix.
- managerNameRe := regexp.MustCompile("^[a-zA-Z0-9-_]{3,64}$")
var managers []*ManagerConfig
- for i, mgr := range cfg.Managers {
+ for _, mgr := range cfg.Managers {
if mgr.Disabled == "" {
managers = append(managers, mgr)
}
- managercfg, err := mgrconfig.LoadPartialData(mgr.ManagerConfig)
- if err != nil {
- return nil, fmt.Errorf("manager config: %v", err)
- }
- if managercfg.Name != "" && mgr.Name != "" {
- return nil, fmt.Errorf("both managercfg.Name=%q and mgr.Name=%q are specified",
- managercfg.Name, mgr.Name)
- }
- if managercfg.Name == "" && mgr.Name == "" {
- return nil, fmt.Errorf("no managercfg.Name nor mgr.Name are specified")
- }
- if managercfg.Name != "" {
- mgr.Name = managercfg.Name
- } else {
- managercfg.Name = cfg.Name + "-" + mgr.Name
- }
- if !managerNameRe.MatchString(mgr.Name) {
- return nil, fmt.Errorf("param 'managers[%v].name' has bad value: %q", i, mgr.Name)
+ if err := loadManagerConfig(cfg, mgr); err != nil {
+ return nil, err
}
- if mgr.Branch == "" {
- mgr.Branch = "master"
- }
- if (mgr.Jobs.TestPatches || mgr.Jobs.PollCommits ||
- mgr.Jobs.BisectCause || mgr.Jobs.BisectFix) &&
- (cfg.DashboardAddr == "" || cfg.DashboardClient == "") {
- return nil, fmt.Errorf("manager %v: has jobs but no dashboard info", mgr.Name)
- }
- if mgr.Jobs.PollCommits && (cfg.DashboardAddr == "" || mgr.DashboardClient == "") {
- return nil, fmt.Errorf("manager %v: commit_poll is set but no dashboard info", mgr.Name)
- }
- if (mgr.Jobs.BisectCause || mgr.Jobs.BisectFix) && cfg.BisectBinDir == "" {
- return nil, fmt.Errorf("manager %v: enabled bisection but no bisect_bin_dir", mgr.Name)
- }
- mgr.managercfg = managercfg
- managercfg.Syzkaller = filepath.FromSlash("syzkaller/current")
- if managercfg.HTTP == "" {
- managercfg.HTTP = fmt.Sprintf(":%v", cfg.ManagerPort)
- cfg.ManagerPort++
- }
- // Note: we don't change Compiler/Ccache because it may be just "gcc" referring
- // to the system binary, or pkg/build/netbsd.go uses "g++" and "clang++" as special marks.
- mgr.Userspace = osutil.Abs(mgr.Userspace)
- mgr.KernelConfig = osutil.Abs(mgr.KernelConfig)
- mgr.KernelBaselineConfig = osutil.Abs(mgr.KernelBaselineConfig)
- mgr.KernelCmdline = osutil.Abs(mgr.KernelCmdline)
- mgr.KernelSysctl = osutil.Abs(mgr.KernelSysctl)
}
cfg.Managers = managers
if len(cfg.Managers) == 0 {
@@ -350,3 +305,54 @@ func loadConfig(filename string) (*Config, error) {
}
return cfg, nil
}
+
+func loadManagerConfig(cfg *Config, mgr *ManagerConfig) error {
+ managercfg, err := mgrconfig.LoadPartialData(mgr.ManagerConfig)
+ if err != nil {
+ return fmt.Errorf("manager config: %v", err)
+ }
+ if managercfg.Name != "" && mgr.Name != "" {
+ return fmt.Errorf("both managercfg.Name=%q and mgr.Name=%q are specified", managercfg.Name, mgr.Name)
+ }
+ if managercfg.Name == "" && mgr.Name == "" {
+ return fmt.Errorf("no managercfg.Name nor mgr.Name are specified")
+ }
+ if managercfg.Name != "" {
+ mgr.Name = managercfg.Name
+ } else {
+ managercfg.Name = cfg.Name + "-" + mgr.Name
+ }
+ // Manager name must not contain dots because it is used as GCE image name prefix.
+ managerNameRe := regexp.MustCompile("^[a-zA-Z0-9-_]{3,64}$")
+ if !managerNameRe.MatchString(mgr.Name) {
+ return fmt.Errorf("param 'managers.name' has bad value: %q", mgr.Name)
+ }
+ if mgr.Branch == "" {
+ mgr.Branch = "master"
+ }
+ if (mgr.Jobs.TestPatches || mgr.Jobs.PollCommits ||
+ mgr.Jobs.BisectCause || mgr.Jobs.BisectFix) &&
+ (cfg.DashboardAddr == "" || cfg.DashboardClient == "") {
+ return fmt.Errorf("manager %v: has jobs but no dashboard info", mgr.Name)
+ }
+ if mgr.Jobs.PollCommits && (cfg.DashboardAddr == "" || mgr.DashboardClient == "") {
+ return fmt.Errorf("manager %v: commit_poll is set but no dashboard info", mgr.Name)
+ }
+ if (mgr.Jobs.BisectCause || mgr.Jobs.BisectFix) && cfg.BisectBinDir == "" {
+ return fmt.Errorf("manager %v: enabled bisection but no bisect_bin_dir", mgr.Name)
+ }
+ mgr.managercfg = managercfg
+ managercfg.Syzkaller = filepath.FromSlash("syzkaller/current")
+ if managercfg.HTTP == "" {
+ managercfg.HTTP = fmt.Sprintf(":%v", cfg.ManagerPort)
+ cfg.ManagerPort++
+ }
+ // Note: we don't change Compiler/Ccache because it may be just "gcc" referring
+ // to the system binary, or pkg/build/netbsd.go uses "g++" and "clang++" as special marks.
+ mgr.Userspace = osutil.Abs(mgr.Userspace)
+ mgr.KernelConfig = osutil.Abs(mgr.KernelConfig)
+ mgr.KernelBaselineConfig = osutil.Abs(mgr.KernelBaselineConfig)
+ mgr.KernelCmdline = osutil.Abs(mgr.KernelCmdline)
+ mgr.KernelSysctl = osutil.Abs(mgr.KernelSysctl)
+ return nil
+}