@@ -68,6 +68,74 @@ def test_snapshot(self, vm_on_zfsvol_sr):
68
68
finally :
69
69
vm .shutdown (verify = True )
70
70
71
+ @pytest .mark .small_vm
72
+ @pytest .mark .big_vm
73
+ def test_snapshots_revert (self , vm_on_zfsvol_sr ):
74
+ vm = vm_on_zfsvol_sr
75
+ vm .start ()
76
+ vm .wait_for_os_booted ()
77
+ vm .wait_for_vm_running_and_ssh_up ()
78
+
79
+ snap1 , snap2 , snap3 = None , None , None
80
+ snap1 = vm .snapshot ()
81
+ vm .ssh_touch_file (f"/{ snap1 .uuid } " )
82
+ snap2 = vm .snapshot ()
83
+ vm .ssh_touch_file (f"/{ snap2 .uuid } " )
84
+ snap3 = vm .snapshot ()
85
+
86
+ # we are in "snap3" state, check all 6 "from A to B"
87
+ # combinations
88
+ snap1 .revert ()
89
+ vm .start ()
90
+ vm .wait_for_vm_running_and_ssh_up ()
91
+ logging .info ("Check files state" )
92
+ vm .ssh ([f"test ! -f /{ snap1 .uuid } " ])
93
+ vm .ssh ([f"test ! -f /{ snap2 .uuid } " ])
94
+ snap2 .revert ()
95
+ vm .start ()
96
+ vm .wait_for_vm_running_and_ssh_up ()
97
+ logging .info ("Check files state" )
98
+ vm .ssh ([f"test -f /{ snap1 .uuid } " ])
99
+ vm .ssh ([f"test ! -f /{ snap2 .uuid } " ])
100
+ snap3 .revert ()
101
+ vm .start ()
102
+ vm .wait_for_vm_running_and_ssh_up ()
103
+ logging .info ("Check files state" )
104
+ vm .ssh ([f"test -f /{ snap1 .uuid } " ])
105
+ vm .ssh ([f"test -f /{ snap2 .uuid } " ])
106
+ snap2 .revert ()
107
+ vm .start ()
108
+ vm .wait_for_vm_running_and_ssh_up ()
109
+ logging .info ("Check files state" )
110
+ vm .ssh ([f"test -f /{ snap1 .uuid } " ])
111
+ vm .ssh ([f"test ! -f /{ snap2 .uuid } " ])
112
+ snap1 .revert ()
113
+ vm .start ()
114
+ vm .wait_for_vm_running_and_ssh_up ()
115
+ logging .info ("Check files state" )
116
+ vm .ssh ([f"test ! -f /{ snap1 .uuid } " ])
117
+ vm .ssh ([f"test ! -f /{ snap2 .uuid } " ])
118
+ snap3 .revert ()
119
+ vm .start ()
120
+ vm .wait_for_vm_running_and_ssh_up ()
121
+ logging .info ("Check files state" )
122
+ vm .ssh ([f"test -f /{ snap1 .uuid } " ])
123
+ vm .ssh ([f"test -f /{ snap2 .uuid } " ])
124
+
125
+ # FIXME: we don't support snapshot destruction yet
126
+ # snap1.destroy(verify=True)
127
+ # snap2.destroy(verify=True)
128
+ # snap3.destroy(verify=True)
129
+
130
+ def get_messages (self , name ):
131
+ args = {
132
+ 'obj-uuid' : self .uuid ,
133
+ 'name' : name ,
134
+ 'params' : 'uuid' ,
135
+ }
136
+
137
+ lines = self .host .xe ('message-list' , args ).splitlines ()
138
+
71
139
# *** tests with reboots (longer tests).
72
140
73
141
@pytest .mark .reboot
0 commit comments