- Add argument to pool Export for history log string, hard force (ExportForce),
export and import tests, and overall tests fixes and improvements
This commit is contained in:
		
							parent
							
								
									39d6835ce3
								
							
						
					
					
						commit
						507abac683
					
				|  | @ -9,6 +9,10 @@ import ( | |||
| 
 | ||||
| func Test(t *testing.T) { | ||||
| 	zpoolTestPoolCreate(t) | ||||
| 	zpoolTestExport(t) | ||||
| 	zpoolTestImport(t) | ||||
| 	zpoolTestExportForce(t) | ||||
| 	zpoolTestImport(t) | ||||
| 	zpoolTestPoolOpenAll(t) | ||||
| 	zpoolTestFailPoolOpen(t) | ||||
| 
 | ||||
|  | @ -20,4 +24,6 @@ func Test(t *testing.T) { | |||
| 	zfsTestDatasetDestroy(t) | ||||
| 
 | ||||
| 	zpoolTestPoolDestroy(t) | ||||
| 
 | ||||
| 	cleanupVDisks() | ||||
| } | ||||
|  |  | |||
							
								
								
									
										27
									
								
								zfs_test.go
								
								
								
								
							
							
						
						
									
										27
									
								
								zfs_test.go
								
								
								
								
							|  | @ -23,8 +23,7 @@ func printDatasets(ds []zfs.Dataset) error { | |||
| 		if err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 		fmt.Printf(" %30s | %10s\n", path, | ||||
| 			p.Value) | ||||
| 		fmt.Printf(" %30s | %10s\n", path, p.Value) | ||||
| 		if len(d.Children) > 0 { | ||||
| 			printDatasets(d.Children) | ||||
| 		} | ||||
|  | @ -159,13 +158,33 @@ func ExampleDatasetOpen() { | |||
| 	d, err := zfs.DatasetOpen("TESTPOOL/DATASET1") | ||||
| 	if err != nil { | ||||
| 		panic(err.Error()) | ||||
| 		return | ||||
| 	} | ||||
| 	defer d.Close() | ||||
| 	var p zfs.Property | ||||
| 	if p, err = d.GetProperty(zfs.ZFSPropAvailable); err != nil { | ||||
| 		panic(err.Error()) | ||||
| 		return | ||||
| 	} | ||||
| 	println(d.PropertyToName(zfs.ZFSPropAvailable), " = ", p.Value) | ||||
| } | ||||
| 
 | ||||
| func ExampleDatasetOpenAll() { | ||||
| 	datasets, err := zfs.DatasetOpenAll() | ||||
| 	if err != nil { | ||||
| 		panic(err.Error()) | ||||
| 	} | ||||
| 	defer zfs.DatasetCloseAll(datasets) | ||||
| 
 | ||||
| 	// Print out path and type of root datasets
 | ||||
| 	for _, d := range datasets { | ||||
| 		path, err := d.Path() | ||||
| 		if err != nil { | ||||
| 			panic(err.Error()) | ||||
| 		} | ||||
| 		p, err := d.GetProperty(zfs.ZFSPropType) | ||||
| 		if err != nil { | ||||
| 			panic(err.Error()) | ||||
| 		} | ||||
| 		fmt.Printf("%30s | %10s\n", path, p.Value) | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
|  |  | |||
							
								
								
									
										13
									
								
								zpool.go
								
								
								
								
							
							
						
						
									
										13
									
								
								zpool.go
								
								
								
								
							|  | @ -549,13 +549,20 @@ func (pool *Pool) Destroy(logStr string) (err error) { | |||
| // Before exporting the pool, all datasets within the pool are unmounted.
 | ||||
| // A pool can not be exported if it has a shared spare that is currently
 | ||||
| // being used.
 | ||||
| func (pool *Pool) Export(force bool) (err error) { | ||||
| func (pool *Pool) Export(force bool, log string) (err error) { | ||||
| 	var force_t C.boolean_t = 0 | ||||
| 	if force { | ||||
| 		force_t = 1 | ||||
| 	} | ||||
| 	retcode := C.zpool_export(pool.list.zph, force_t, nil) | ||||
| 	if retcode != 0 { | ||||
| 	if rc := C.zpool_export(pool.list.zph, force_t, C.CString(log)); rc != 0 { | ||||
| 		err = LastError() | ||||
| 	} | ||||
| 	return | ||||
| } | ||||
| 
 | ||||
| // Hard force
 | ||||
| func (pool *Pool) ExportForce(log string) (err error) { | ||||
| 	if rc := C.zpool_export_force(pool.list.zph, C.CString(log)); rc != 0 { | ||||
| 		err = LastError() | ||||
| 	} | ||||
| 	return | ||||
|  |  | |||
|  | @ -26,6 +26,36 @@ func CreateTmpSparse(prefix string, size int64) (path string, err error) { | |||
| 	return | ||||
| } | ||||
| 
 | ||||
| var s1path, s2path, s3path string | ||||
| 
 | ||||
| // This will create sparse files in tmp directory,
 | ||||
| // for purpose of creating test pool.
 | ||||
| func createTestpoolVdisks() (err error) { | ||||
| 	if s1path, err = CreateTmpSparse("zfs_test_", 0x140000000); err != nil { | ||||
| 		return | ||||
| 	} | ||||
| 	if s2path, err = CreateTmpSparse("zfs_test_", 0x140000000); err != nil { | ||||
| 		// try cleanup
 | ||||
| 		os.Remove(s1path) | ||||
| 		return | ||||
| 	} | ||||
| 	if s3path, err = CreateTmpSparse("zfs_test_", 0x140000000); err != nil { | ||||
| 		// try cleanup
 | ||||
| 		os.Remove(s1path) | ||||
| 		os.Remove(s2path) | ||||
| 		return | ||||
| 	} | ||||
| 	return | ||||
| } | ||||
| 
 | ||||
| // Cleanup sparse files used for tests
 | ||||
| func cleanupVDisks() { | ||||
| 	// try cleanup
 | ||||
| 	os.Remove(s1path) | ||||
| 	os.Remove(s2path) | ||||
| 	os.Remove(s3path) | ||||
| } | ||||
| 
 | ||||
| /* ------------------------------------------------------------------------- */ | ||||
| // TESTS:
 | ||||
| 
 | ||||
|  | @ -43,26 +73,13 @@ func zpoolTestPoolCreate(t *testing.T) { | |||
| 		p.Close() | ||||
| 		TST_POOL_NAME += "0" | ||||
| 	} | ||||
| 
 | ||||
| 	var s1path, s2path, s3path string | ||||
| 	var err error | ||||
| 	if s1path, err = CreateTmpSparse("zfs_test_", 0x140000000); err != nil { | ||||
| 		t.Error(err) | ||||
| 		return | ||||
| 	} | ||||
| 	if s2path, err = CreateTmpSparse("zfs_test_", 0x140000000); err != nil { | ||||
| 		// try cleanup
 | ||||
| 		os.Remove(s1path) | ||||
| 		t.Error(err) | ||||
| 		return | ||||
| 	} | ||||
| 	if s3path, err = CreateTmpSparse("zfs_test_", 0x140000000); err != nil { | ||||
| 		// try cleanup
 | ||||
| 		os.Remove(s1path) | ||||
| 		os.Remove(s2path) | ||||
| 
 | ||||
| 	if err = createTestpoolVdisks(); err != nil { | ||||
| 		t.Error(err) | ||||
| 		return | ||||
| 	} | ||||
| 
 | ||||
| 	disks := [2]string{s1path, s2path} | ||||
| 
 | ||||
| 	var vdevs, mdevs, sdevs []zfs.VDevSpec | ||||
|  | @ -95,10 +112,7 @@ func zpoolTestPoolCreate(t *testing.T) { | |||
| 		return | ||||
| 	} | ||||
| 	defer pool.Close() | ||||
| 	// try cleanup
 | ||||
| 	os.Remove(s1path) | ||||
| 	os.Remove(s2path) | ||||
| 	os.Remove(s3path) | ||||
| 
 | ||||
| 	println("PASS\n") | ||||
| } | ||||
| 
 | ||||
|  | @ -159,6 +173,44 @@ func zpoolTestFailPoolOpen(t *testing.T) { | |||
| 	p.Close() | ||||
| } | ||||
| 
 | ||||
| func zpoolTestExport(t *testing.T) { | ||||
| 	println("TEST POOL Export( ", TST_POOL_NAME, " ) ... ") | ||||
| 	p, err := zfs.PoolOpen(TST_POOL_NAME) | ||||
| 	if err != nil { | ||||
| 		t.Error(err) | ||||
| 		return | ||||
| 	} | ||||
| 	p.Export(false, "Test exporting pool") | ||||
| 	defer p.Close() | ||||
| 	println("PASS\n") | ||||
| } | ||||
| 
 | ||||
| func zpoolTestExportForce(t *testing.T) { | ||||
| 	println("TEST POOL ExportForce( ", TST_POOL_NAME, " ) ... ") | ||||
| 	p, err := zfs.PoolOpen(TST_POOL_NAME) | ||||
| 	if err != nil { | ||||
| 		t.Error(err) | ||||
| 		return | ||||
| 	} | ||||
| 	p.ExportForce("Test force exporting pool") | ||||
| 	defer p.Close() | ||||
| 	println("PASS\n") | ||||
| } | ||||
| 
 | ||||
| func zpoolTestImport(t *testing.T) { | ||||
| 	println("TEST POOL Import( ", TST_POOL_NAME, " ) ... ") | ||||
| 	p, err := zfs.PoolImport(TST_POOL_NAME, []string{"/tmp"}) | ||||
| 	if err != nil { | ||||
| 		t.Error(err) | ||||
| 		return | ||||
| 	} | ||||
| 	defer p.Close() | ||||
| 	println("PASS\n") | ||||
| } | ||||
| 
 | ||||
| /* ------------------------------------------------------------------------- */ | ||||
| // EXAMPLES:
 | ||||
| 
 | ||||
| func ExamplePoolProp() { | ||||
| 	if pool, err := zfs.PoolOpen("SSD"); err == nil { | ||||
| 		print("Pool size is: ", pool.Properties[zfs.PoolPropSize].Value) | ||||
|  | @ -169,9 +221,6 @@ func ExamplePoolProp() { | |||
| 	} | ||||
| } | ||||
| 
 | ||||
| /* ------------------------------------------------------------------------- */ | ||||
| // EXAMPLES:
 | ||||
| 
 | ||||
| // Open and list all pools on system with them properties
 | ||||
| func ExamplePoolOpenAll() { | ||||
| 	// Lets open handles to all active pools on system
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue