tests: Add tests for vlmcd flush
authorFilippos Giannakos <philipgian@grnet.gr>
Fri, 13 Sep 2013 10:51:55 +0000 (13:51 +0300)
committerFilippos Giannakos <philipgian@grnet.gr>
Wed, 4 Dec 2013 14:51:48 +0000 (16:51 +0200)
xseg/tools/qa/tests.py

index 03b01a7..8d48ffc 100644 (file)
@@ -630,6 +630,62 @@ class VlmcdTest(XsegTest):
             reqs.remove(req)
             self.assertTrue(req.put())
 
+    def test_flush(self):
+        datalen = 1024
+        data = get_random_string(datalen, 16)
+        volume = "myvolume"
+        volsize = 10*1024*1024
+
+        #This may seems weird, but actually vlmcd flush, only guarantees that
+        #there are no pending operation the volume. On a volume that does not
+        #exists, this is always true, so this should succeed.
+        self.send_and_evaluate_write(self.vlmcdport, volume, data="",
+                flags=XF_FLUSH, expected=True)
+        self.send_and_evaluate_clone(self.mapperdport, "", clone=volume,
+                clone_size=volsize)
+        self.send_and_evaluate_write(self.vlmcdport, volume, data="",
+                flags=XF_FLUSH)
+        self.send_and_evaluate_write(self.vlmcdport, volume, data=data,
+                serviced=datalen)
+        self.send_and_evaluate_write(self.vlmcdport, volume, data="",
+                flags=XF_FLUSH)
+
+    def test_flush2(self):
+        volume = "myvolume"
+        volsize = 10*1024*1024
+        datalen = 1024
+        data = get_random_string(datalen, 16)
+
+        self.send_and_evaluate_clone(self.mapperdport, "", clone=volume,
+                clone_size=volsize)
+        xinfo = self.get_reply_info(volsize)
+        reqs = Set([])
+        reqs.add(self.send_write(self.vlmcdport, volume, data=data))
+        reqs.add(self.send_write(self.vlmcdport, volume, data=data))
+        reqs.add(self.send_write(self.vlmcdport, volume, data=data))
+        reqs.add(self.send_write(self.vlmcdport, volume, data=data))
+        reqs.add(self.send_write(self.vlmcdport, volume, data=data))
+        reqs.add(self.send_write(self.vlmcdport, volume, data=data))
+        reqs.add(self.send_write(self.vlmcdport, volume, data=data))
+        reqs.add(self.send_write(self.vlmcdport, volume, data=data))
+        reqs.add(self.send_write(self.vlmcdport, volume, data=data))
+        reqs.add(self.send_write(self.vlmcdport, volume, data=data))
+        reqs.add(self.send_write(self.vlmcdport, volume, data=data))
+        reqs.add(self.send_write(self.vlmcdport, volume, data=data))
+        reqs.add(self.send_write(self.vlmcdport, volume, data=data))
+        reqs.add(self.send_write(self.vlmcdport, volume, data="", flags=XF_FLUSH))
+        reqs.add(self.send_write(self.vlmcdport, volume, data=data))
+        reqs.add(self.send_write(self.vlmcdport, volume, data=data))
+        reqs.add(self.send_write(self.vlmcdport, volume, data=data))
+        reqs.add(self.send_write(self.vlmcdport, volume, data=data))
+        reqs.add(self.send_write(self.vlmcdport, volume, data=data))
+        reqs.add(self.send_write(self.vlmcdport, volume, data=data))
+        while len(reqs) > 0:
+            req = self.xseg.wait_requests(reqs)
+            self.evaluate_req(req)
+            reqs.remove(req)
+            self.assertTrue(req.put())
+
     def test_hash(self):
         blocksize = self.blocksize
         volume = "myvolume"