|
|
package main
import ( "bufio" "bytes" "flag" "fmt" "os" "os/exec" "path/filepath"
"github.com/syndtr/goleveldb/leveldb/storage" )
var ( filename string child bool )
func init() { flag.StringVar(&filename, "filename", filepath.Join(os.TempDir(), "goleveldb_filelock_test"), "Filename used for testing") flag.BoolVar(&child, "child", false, "This is the child") }
func runChild() error { var args []string args = append(args, os.Args[1:]...) args = append(args, "-child") cmd := exec.Command(os.Args[0], args...) var out bytes.Buffer cmd.Stdout = &out err := cmd.Run() r := bufio.NewReader(&out) for { line, _, e1 := r.ReadLine() if e1 != nil { break } fmt.Println("[Child]", string(line)) } return err }
func main() { flag.Parse()
fmt.Printf("Using path: %s\n", filename) if child { fmt.Println("Child flag set.") }
stor, err := storage.OpenFile(filename, false) if err != nil { fmt.Printf("Could not open storage: %s", err) os.Exit(10) }
if !child { fmt.Println("Executing child -- first test (expecting error)") err := runChild() if err == nil { fmt.Println("Expecting error from child") } else if err.Error() != "exit status 10" { fmt.Println("Got unexpected error from child:", err) } else { fmt.Printf("Got error from child: %s (expected)\n", err) } }
err = stor.Close() if err != nil { fmt.Printf("Error when closing storage: %s", err) os.Exit(11) }
if !child { fmt.Println("Executing child -- second test") err := runChild() if err != nil { fmt.Println("Got unexpected error from child:", err) } }
os.RemoveAll(filename) }
|