diff --git a/worker/config_test.go b/worker/config_test.go index a4de3cb..ea461a2 100644 --- a/worker/config_test.go +++ b/worker/config_test.go @@ -96,6 +96,46 @@ exclude_file = "/etc/tunasync.d/fedora-exclude.txt" So(m.ExcludeFile, ShouldEqual, "/etc/tunasync.d/fedora-exclude.txt") So(len(cfg.Mirrors), ShouldEqual, 3) + }) + + Convey("Providers can be inited from a valid config file", t, func() { + tmpfile, err := ioutil.TempFile("", "tunasync") + So(err, ShouldEqual, nil) + defer os.Remove(tmpfile.Name()) + + err = ioutil.WriteFile(tmpfile.Name(), []byte(cfgBlob), 0644) + So(err, ShouldEqual, nil) + defer tmpfile.Close() + + cfg, err := loadConfig(tmpfile.Name()) + So(err, ShouldBeNil) + + providers := initProviders(cfg) + + p := providers[0] + So(p.Name(), ShouldEqual, "AOSP") + So(p.LogDir(), ShouldEqual, "/var/log/tunasync/AOSP") + So(p.LogFile(), ShouldEqual, "/var/log/tunasync/AOSP/latest.log") + _, ok := p.(*cmdProvider) + So(ok, ShouldBeTrue) + + p = providers[1] + So(p.Name(), ShouldEqual, "debian") + So(p.LogDir(), ShouldEqual, "/var/log/tunasync/debian") + So(p.LogFile(), ShouldEqual, "/var/log/tunasync/debian/latest.log") + r2p, ok := p.(*twoStageRsyncProvider) + So(ok, ShouldBeTrue) + So(r2p.stage1Profile, ShouldEqual, "debian") + So(r2p.WorkingDir(), ShouldEqual, "/data/mirrors/debian") + + p = providers[2] + So(p.Name(), ShouldEqual, "fedora") + So(p.LogDir(), ShouldEqual, "/var/log/tunasync/fedora") + So(p.LogFile(), ShouldEqual, "/var/log/tunasync/fedora/latest.log") + rp, ok := p.(*rsyncProvider) + So(ok, ShouldBeTrue) + So(rp.WorkingDir(), ShouldEqual, "/data/mirrors/fedora") + So(rp.excludeFile, ShouldEqual, "/etc/tunasync.d/fedora-exclude.txt") }) } diff --git a/worker/main.go b/worker/main.go index df5ad9e..a51f579 100644 --- a/worker/main.go +++ b/worker/main.go @@ -68,6 +68,24 @@ func initProviders(c *Config) []mirrorProvider { panic(err) } providers = append(providers, p) + case ProvTwoStageRsync: + rc := twoStageRsyncConfig{ + name: mirror.Name, + stage1Profile: mirror.Stage1Profile, + upstreamURL: mirror.Upstream, + password: mirror.Password, + excludeFile: mirror.ExcludeFile, + workingDir: filepath.Join(mirrorDir, mirror.Name), + logDir: logDir, + logFile: filepath.Join(logDir, "latest.log"), + useIPv6: mirror.UseIPv6, + interval: time.Duration(mirror.Interval) * time.Minute, + } + p, err := newTwoStageRsyncProvider(rc) + if err != nil { + panic(err) + } + providers = append(providers, p) default: panic(errors.New("Invalid mirror provider"))