@@ -143,6 +143,100 @@ func DriverTestCreateSnap(t testing.TB, drivername string, driverOptions ...stri
143143 verifyBase (t , driver , "Snap" )
144144}
145145
146+ // DriverTestCreateFromTemplate Create a driver and template of a snap and verifies its
147+ // contents.
148+ func DriverTestCreateFromTemplate (t testing.TB , drivername string , driverOptions ... string ) {
149+ driver := GetDriver (t , drivername , driverOptions ... )
150+ defer PutDriver (t )
151+
152+ createBase (t , driver , "Base" )
153+ defer func () {
154+ require .NoError (t , driver .Remove ("Base" ))
155+ }()
156+
157+ err := driver .Create ("Snap" , "Base" , nil )
158+ require .NoError (t , err )
159+ defer func () {
160+ require .NoError (t , driver .Remove ("Snap" ))
161+ }()
162+
163+ content := []byte ("test content" )
164+ if err := addFile (driver , "Snap" , "testfile.txt" , content ); err != nil {
165+ t .Fatal (err )
166+ }
167+
168+ err = driver .CreateFromTemplate ("FromTemplate" , "Snap" , nil , "Base" , nil , nil , true )
169+ require .NoError (t , err )
170+ defer func () {
171+ require .NoError (t , driver .Remove ("FromTemplate" ))
172+ }()
173+
174+ err = driver .CreateFromTemplate ("ROFromTemplate" , "Snap" , nil , "Base" , nil , nil , false )
175+ require .NoError (t , err )
176+ defer func () {
177+ require .NoError (t , driver .Remove ("ROFromTemplate" ))
178+ }()
179+
180+ noChanges := []archive.Change {}
181+
182+ changes , err := driver .Changes ("FromTemplate" , nil , "Snap" , nil , "" )
183+ if err != nil {
184+ t .Fatal (err )
185+ }
186+ if err = checkChanges (noChanges , changes ); err != nil {
187+ t .Fatal (err )
188+ }
189+
190+ changes , err = driver .Changes ("ROFromTemplate" , nil , "Snap" , nil , "" )
191+ if err != nil {
192+ t .Fatal (err )
193+ }
194+ if err = checkChanges (noChanges , changes ); err != nil {
195+ t .Fatal (err )
196+ }
197+
198+ if err := checkFile (driver , "FromTemplate" , "testfile.txt" , content ); err != nil {
199+ t .Fatal (err )
200+ }
201+ if err := checkFile (driver , "ROFromTemplate" , "testfile.txt" , content ); err != nil {
202+ t .Fatal (err )
203+ }
204+ if err := checkFile (driver , "Snap" , "testfile.txt" , content ); err != nil {
205+ t .Fatal (err )
206+ }
207+
208+ expectedChanges := []archive.Change {{
209+ Path : "/testfile.txt" ,
210+ Kind : archive .ChangeAdd ,
211+ }}
212+
213+ changes , err = driver .Changes ("Snap" , nil , "Base" , nil , "" )
214+ if err != nil {
215+ t .Fatal (err )
216+ }
217+ if err = checkChanges (expectedChanges , changes ); err != nil {
218+ t .Fatal (err )
219+ }
220+
221+ changes , err = driver .Changes ("FromTemplate" , nil , "Base" , nil , "" )
222+ if err != nil {
223+ t .Fatal (err )
224+ }
225+ if err = checkChanges (expectedChanges , changes ); err != nil {
226+ t .Fatal (err )
227+ }
228+
229+ changes , err = driver .Changes ("ROFromTemplate" , nil , "Base" , nil , "" )
230+ if err != nil {
231+ t .Fatal (err )
232+ }
233+ if err = checkChanges (expectedChanges , changes ); err != nil {
234+ t .Fatal (err )
235+ }
236+
237+ verifyBase (t , driver , "Base" )
238+ }
239+
146240// DriverTestDeepLayerRead reads a file from a lower layer under a given number of layers
147241func DriverTestDeepLayerRead (t testing.TB , layerCount int , drivername string , driverOptions ... string ) {
148242 driver := GetDriver (t , drivername , driverOptions ... )
0 commit comments