// Like TearDown, but doesn't panic. func (t *SubprocessTest) destroy() (err error) { // Make sure we clean up after ourselves after everything else below. // Close what is necessary. for _, c := range t.ToClose { if c == nil { continue } ogletest.ExpectEq(nil, c.Close()) } // If we didn't try to mount the file system, there's nothing further to do. if t.mountSampleErr == nil { return } // In the background, initiate an unmount. unmountErrChan := make(chan error) go func() { unmountErrChan <- unmount(t.Dir) }() // Make sure we wait for the unmount, even if we've already returned early in // error. Return its error if we haven't seen any other error. defer func() { // Wait. unmountErr := <-unmountErrChan if unmountErr != nil { if err != nil { log.Println("unmount:", unmountErr) return } err = fmt.Errorf("unmount: %v", unmountErr) return } // Clean up. ogletest.ExpectEq(nil, os.Remove(t.Dir)) }() // Wait for the subprocess. if err = <-t.mountSampleErr; err != nil { return } return }
// Like TearDown, but doesn't panic. func (t *SampleTest) destroy() (err error) { // Close what is necessary. for _, c := range t.ToClose { if c == nil { continue } ogletest.ExpectEq(nil, c.Close()) } // Was the file system mounted? if t.mfs == nil { return } // Unmount the file system. err = unmount(t.Dir) if err != nil { err = fmt.Errorf("unmount: %v", err) return } // Unlink the mount point. if err = os.Remove(t.Dir); err != nil { err = fmt.Errorf("Unlinking mount point: %v", err) return } // Join the file system. err = t.mfs.Join(t.Ctx) if err != nil { err = fmt.Errorf("mfs.Join: %v", err) return } return }