18547: Error out if two volumes return the same non-empty DeviceID.
[arvados.git] / services / keep-balance / balance_run_test.go
index 18a8bdcf47b111b0c6ea6469d58b60d2a10ea5f5..0d1b6b5912d2820be5a40f1000871b02c1321e0e 100644 (file)
@@ -87,20 +87,24 @@ var stubServices = []arvados.KeepService{
 
 var stubMounts = map[string][]arvados.KeepMount{
        "keep0.zzzzz.arvadosapi.com:25107": {{
-               UUID:     "zzzzz-ivpuk-000000000000000",
-               DeviceID: "keep0-vol0",
+               UUID:           "zzzzz-ivpuk-000000000000000",
+               DeviceID:       "keep0-vol0",
+               StorageClasses: map[string]bool{"default": true},
        }},
        "keep1.zzzzz.arvadosapi.com:25107": {{
-               UUID:     "zzzzz-ivpuk-100000000000000",
-               DeviceID: "keep1-vol0",
+               UUID:           "zzzzz-ivpuk-100000000000000",
+               DeviceID:       "keep1-vol0",
+               StorageClasses: map[string]bool{"default": true},
        }},
        "keep2.zzzzz.arvadosapi.com:25107": {{
-               UUID:     "zzzzz-ivpuk-200000000000000",
-               DeviceID: "keep2-vol0",
+               UUID:           "zzzzz-ivpuk-200000000000000",
+               DeviceID:       "keep2-vol0",
+               StorageClasses: map[string]bool{"default": true},
        }},
        "keep3.zzzzz.arvadosapi.com:25107": {{
-               UUID:     "zzzzz-ivpuk-300000000000000",
-               DeviceID: "keep3-vol0",
+               UUID:           "zzzzz-ivpuk-300000000000000",
+               DeviceID:       "keep3-vol0",
+               StorageClasses: map[string]bool{"default": true},
        }},
 }
 
@@ -393,6 +397,32 @@ func (s *runSuite) TestRefuseNonAdmin(c *check.C) {
        c.Check(pullReqs.Count(), check.Equals, 0)
 }
 
+func (s *runSuite) TestRefuseSameDeviceDifferentVolumes(c *check.C) {
+       opts := RunOptions{
+               CommitPulls: true,
+               CommitTrash: true,
+               Logger:      ctxlog.TestLogger(c),
+       }
+       s.stub.serveCurrentUserAdmin()
+       s.stub.serveZeroCollections()
+       s.stub.serveKeepServices(stubServices)
+       s.stub.mux.HandleFunc("/mounts", func(w http.ResponseWriter, r *http.Request) {
+               hostid := r.Host[:5] // "keep0.zzzzz.arvadosapi.com:25107" => "keep0"
+               json.NewEncoder(w).Encode([]arvados.KeepMount{{
+                       UUID:           "zzzzz-ivpuk-0000000000" + hostid,
+                       DeviceID:       "keep0-vol0",
+                       StorageClasses: map[string]bool{"default": true},
+               }})
+       })
+       trashReqs := s.stub.serveKeepstoreTrash()
+       pullReqs := s.stub.serveKeepstorePull()
+       srv := s.newServer(&opts)
+       _, err := srv.runOnce()
+       c.Check(err, check.ErrorMatches, "cannot continue with config errors.*")
+       c.Check(trashReqs.Count(), check.Equals, 0)
+       c.Check(pullReqs.Count(), check.Equals, 0)
+}
+
 func (s *runSuite) TestWriteLostBlocks(c *check.C) {
        lostf, err := ioutil.TempFile("", "keep-balance-lost-blocks-test-")
        c.Assert(err, check.IsNil)