@@ -40,20 +40,45 @@ func TestHandlerListRepos(t *testing.T) {
40
40
41
41
func TestHandlerReloadAllRepos (t * testing.T ) {
42
42
te := NewTestEnv (t )
43
- stateDir , err := os .MkdirTemp ("" , t .Name ())
43
+ rootDir , err := os .MkdirTemp ("" , t .Name ())
44
44
require .NoError (t , err )
45
45
t .Cleanup (func () {
46
- _ = os .RemoveAll (stateDir )
46
+ _ = os .RemoveAll (rootDir )
47
47
})
48
+ cfgDir1 := filepath .Join (rootDir , "cfg1" )
49
+ cfgDir2 := filepath .Join (rootDir , "cfg2" )
50
+ require .NoError (t , os .Mkdir (cfgDir1 , 0o755 ))
51
+ require .NoError (t , os .Mkdir (cfgDir2 , 0o755 ))
48
52
te .server .config = Config {
49
- RepoLogsDir : filepath .Join (stateDir , "logs" ),
50
- RepoConfigDir : []string {"/no/such/dir" , stateDir },
53
+ RepoLogsDir : filepath .Join (rootDir , "logs" ),
54
+ RepoConfigDir : []string {"/no/such/dir" , cfgDir1 , cfgDir2 },
51
55
}
56
+ te .server .repoSchedules .Set ("should-be-deleted" , cron .Schedule (nil ))
57
+
58
+ require .NoError (t , te .server .db .Create ([]model.Repo {
59
+ {
60
+ Name : "should-be-deleted" ,
61
+ },
62
+ {
63
+ Name : "repo0" ,
64
+ Cron : "1 * * * *" ,
65
+ },
66
+ }).Error )
67
+
68
+ require .NoError (t , te .server .db .Create ([]model.RepoMeta {
69
+ {
70
+ Name : "should-be-deleted" ,
71
+ },
72
+ {
73
+ Name : "repo0" ,
74
+ Upstream : "http://foo.com" ,
75
+ },
76
+ }).Error )
52
77
53
78
for i := 0 ; i < 2 ; i ++ {
54
79
testutils .WriteFile (
55
80
t ,
56
- filepath .Join (stateDir , fmt .Sprintf ("repo%d.yaml" , i )),
81
+ filepath .Join (cfgDir1 , fmt .Sprintf ("repo%d.yaml" , i )),
57
82
fmt .Sprintf (`
58
83
name: repo%d
59
84
cron: "* * * * *"
@@ -62,15 +87,38 @@ storageDir: /tmp
62
87
` , i ),
63
88
)
64
89
}
90
+ testutils .WriteFile (t , filepath .Join (cfgDir2 , "repo0.yaml" ), `
91
+ image: ubuntu
92
+ envs:
93
+ UPSTREAM: http://bar.com
94
+ ` )
65
95
66
96
cli := te .RESTClient ()
67
97
resp , err := cli .R ().Post ("/repos" )
68
98
require .NoError (t , err )
69
99
require .True (t , resp .IsSuccess (), "Unexpected response: %s" , resp .Body ())
70
100
101
+ require .EqualValues (t , 2 , te .server .repoSchedules .Count ())
102
+
71
103
var repos []model.Repo
72
- require .NoError (t , te .server .db .Find (& repos ).Error )
104
+ require .NoError (t , te .server .db .Order ( "name" ). Find (& repos ).Error )
73
105
require .Len (t , repos , 2 )
106
+
107
+ require .EqualValues (t , "repo0" , repos [0 ].Name )
108
+ require .EqualValues (t , "ubuntu" , repos [0 ].Image )
109
+ require .EqualValues (t , "* * * * *" , repos [0 ].Cron )
110
+ require .NotEmpty (t , repos [0 ].Envs )
111
+
112
+ require .EqualValues (t , "repo1" , repos [1 ].Name )
113
+ require .EqualValues (t , "alpine:latest" , repos [1 ].Image )
114
+
115
+ var metas []model.RepoMeta
116
+ require .NoError (t , te .server .db .Order ("name" ).Find (& metas ).Error )
117
+ require .Len (t , repos , 2 )
118
+ require .EqualValues (t , "repo0" , metas [0 ].Name )
119
+ require .EqualValues (t , "http://bar.com" , metas [0 ].Upstream )
120
+
121
+ require .EqualValues (t , "repo1" , metas [1 ].Name )
74
122
}
75
123
76
124
func TestHandlerSyncRepo (t * testing.T ) {
@@ -109,3 +157,26 @@ func TestHandlerSyncRepo(t *testing.T) {
109
157
require .NotEmpty (t , meta .LastSuccess )
110
158
require .NotEmpty (t , meta .NextRun )
111
159
}
160
+
161
+ func TestHandlerRemoveRepo (t * testing.T ) {
162
+ te := NewTestEnv (t )
163
+ name := te .RandomString ()
164
+ require .NoError (t , te .server .db .Create (& model.Repo {
165
+ Name : name ,
166
+ Cron : "@every 1h" ,
167
+ Image : "alpine:latest" ,
168
+ StorageDir : "/data" ,
169
+ }).Error )
170
+ require .NoError (t , te .server .db .Create (& model.RepoMeta {Name : name }).Error )
171
+ schedule , _ := cron .ParseStandard ("@every 1h" )
172
+ te .server .repoSchedules .Set (name , schedule )
173
+
174
+ cli := te .RESTClient ()
175
+ resp , err := cli .R ().Delete (fmt .Sprintf ("/repos/%s" , name ))
176
+ require .NoError (t , err )
177
+ require .True (t , resp .IsSuccess (), "Unexpected response: %s" , resp .Body ())
178
+
179
+ require .False (t , te .server .repoSchedules .Has (name ))
180
+ require .ErrorContains (t , te .server .db .First (& model.Repo {Name : name }).Error , "record not found" )
181
+ require .ErrorContains (t , te .server .db .First (& model.RepoMeta {Name : name }).Error , "record not found" )
182
+ }
0 commit comments