github.com/vlifesystems/rulehunter@v0.0.0-20180501090014-673078aa4a83/rulehunter_su_test.go (about) 1 // +build su 2 3 package main 4 5 import ( 6 "fmt" 7 "log" 8 "os" 9 "path/filepath" 10 "reflect" 11 "strings" 12 "testing" 13 "time" 14 15 "github.com/vlifesystems/rulehunter/cmd" 16 "github.com/vlifesystems/rulehunter/internal" 17 "github.com/vlifesystems/rulehunter/internal/testhelpers" 18 ) 19 20 func TestMain(m *testing.M) { 21 if len(os.Args) >= 2 && (os.Args[1] == "serve" || os.Args[1] == "service") { 22 for _, arg := range os.Args[2:] { 23 if strings.HasPrefix(arg, "--config") { 24 cfgFilename := strings.Split(arg, "=")[1] 25 cfgDir := filepath.Dir(cfgFilename) 26 pwd, err := os.Getwd() 27 if err != nil { 28 log.Fatalf("os.Getwd: %s", err) 29 } 30 if err := os.Chdir(cfgDir); err != nil { 31 log.Fatalf("os.Chdir: %s", err) 32 } 33 defer os.Chdir(pwd) 34 } 35 } 36 if err := cmd.RootCmd.Execute(); err != nil { 37 log.Fatal(err) 38 os.Exit(1) 39 } 40 os.Exit(0) 41 } 42 os.Exit(m.Run()) 43 } 44 45 func TestRulehunter_service_install(t *testing.T) { 46 for _, user := range knownUsers { 47 t.Logf("user: %s", user) 48 cfgDir := testhelpers.BuildConfigDirs(t, false) 49 defer os.RemoveAll(cfgDir) 50 testhelpers.MustWriteConfig(t, cfgDir, 10) 51 52 if user != "" { 53 runOSCmd(t, 54 true, 55 os.Args[0], 56 "service", 57 "install", 58 fmt.Sprintf("--config=%s", filepath.Join(cfgDir, "config.yaml")), 59 fmt.Sprintf("--user=%s", user), 60 ) 61 } else { 62 runOSCmd(t, 63 true, 64 os.Args[0], 65 "service", 66 "install", 67 fmt.Sprintf("--config=%s", filepath.Join(cfgDir, "config.yaml")), 68 ) 69 } 70 71 startService(t, "rulehunter") 72 defer stopService(t, "rulehunter") 73 74 testhelpers.CopyFile( 75 t, 76 filepath.Join("fixtures", "debt.csv"), 77 filepath.Join(cfgDir, "datasets"), 78 ) 79 80 if !testing.Short() { 81 time.Sleep(4 * time.Second) 82 } 83 testhelpers.CopyFile( 84 t, 85 filepath.Join("fixtures", "debt_datasets.json"), 86 filepath.Join(cfgDir, "experiments"), 87 ) 88 testhelpers.CopyFile( 89 t, 90 filepath.Join("fixtures", "debt_datasets.yaml"), 91 filepath.Join(cfgDir, "experiments"), 92 ) 93 testhelpers.CopyFile( 94 t, 95 filepath.Join("fixtures", "debt_datasets.jso"), 96 filepath.Join(cfgDir, "experiments"), 97 ) 98 testhelpers.CopyFile( 99 t, 100 filepath.Join("fixtures", "debt2_datasets.json"), 101 filepath.Join(cfgDir, "experiments"), 102 ) 103 104 wantReportFiles := []string{ 105 // "debt_datasets.yaml": test 106 internal.MakeBuildFilename( 107 "test", 108 "testing", 109 "What is most likely to indicate success", 110 ), 111 // "debt2_datasets.json" 112 internal.MakeBuildFilename( 113 "train", 114 "", 115 "What is most likely to indicate success (2)", 116 ), 117 // "debt_datasets.yaml": train 118 internal.MakeBuildFilename( 119 "train", 120 "testing", 121 "What is most likely to indicate success", 122 ), 123 // "debt_datasets.json" 124 internal.MakeBuildFilename( 125 "train", 126 "", 127 "What is most likely to indicate success", 128 ), 129 } 130 isFinished := false 131 files := []string{} 132 timeoutC := time.NewTimer(20 * time.Second).C 133 tickerC := time.NewTicker(400 * time.Millisecond).C 134 for !isFinished { 135 select { 136 case <-tickerC: 137 files = testhelpers.GetFilesInDir( 138 t, 139 filepath.Join(cfgDir, "build", "reports"), 140 ) 141 if reflect.DeepEqual(files, wantReportFiles) { 142 isFinished = true 143 break 144 } 145 case <-timeoutC: 146 t.Errorf("(user: %s) didn't generate correct files within time period, got: %v, want: %v", 147 user, files, wantReportFiles) 148 isFinished = true 149 break 150 } 151 } 152 stopService(t, "rulehunter") 153 } 154 } 155 156 func TestRulehunter_service_uninstall(t *testing.T) { 157 cfgDir := testhelpers.BuildConfigDirs(t, false) 158 defer os.RemoveAll(cfgDir) 159 testhelpers.MustWriteConfig(t, cfgDir, 10) 160 runOSCmd(t, 161 true, 162 os.Args[0], 163 "service", 164 "uninstall", 165 fmt.Sprintf("--config=%s", filepath.Join(cfgDir, "config.yaml")), 166 ) 167 runOSCmd(t, 168 true, 169 os.Args[0], 170 "service", 171 "install", 172 fmt.Sprintf("--config=%s", filepath.Join(cfgDir, "config.yaml")), 173 ) 174 175 startService(t, "rulehunter") 176 defer stopService(t, "rulehunter") 177 runOSCmd(t, 178 true, 179 os.Args[0], 180 "service", 181 "uninstall", 182 fmt.Sprintf("--config=%s", filepath.Join(cfgDir, "config.yaml")), 183 ) 184 }