github.com/insionng/yougam@v0.0.0-20170714101924-2bc18d833463/libraries/syndtr/goleveldb/manualtest/filelock/main.go (about)

     1  package main
     2  
     3  import (
     4  	"bufio"
     5  	"bytes"
     6  	"flag"
     7  	"fmt"
     8  	"os"
     9  	"os/exec"
    10  	"path/filepath"
    11  
    12  	"github.com/insionng/yougam/libraries/syndtr/goleveldb/leveldb/storage"
    13  )
    14  
    15  var (
    16  	filename string
    17  	child    bool
    18  )
    19  
    20  func init() {
    21  	flag.StringVar(&filename, "filename", filepath.Join(os.TempDir(), "goleveldb_filelock_test"), "Filename used for testing")
    22  	flag.BoolVar(&child, "child", false, "This is the child")
    23  }
    24  
    25  func runChild() error {
    26  	var args []string
    27  	args = append(args, os.Args[1:]...)
    28  	args = append(args, "-child")
    29  	cmd := exec.Command(os.Args[0], args...)
    30  	var out bytes.Buffer
    31  	cmd.Stdout = &out
    32  	err := cmd.Run()
    33  	r := bufio.NewReader(&out)
    34  	for {
    35  		line, _, e1 := r.ReadLine()
    36  		if e1 != nil {
    37  			break
    38  		}
    39  		fmt.Println("[Child]", string(line))
    40  	}
    41  	return err
    42  }
    43  
    44  func main() {
    45  	flag.Parse()
    46  
    47  	fmt.Printf("Using path: %s\n", filename)
    48  	if child {
    49  		fmt.Println("Child flag set.")
    50  	}
    51  
    52  	stor, err := storage.OpenFile(filename, false)
    53  	if err != nil {
    54  		fmt.Printf("Could not open storage: %s", err)
    55  		os.Exit(10)
    56  	}
    57  
    58  	if !child {
    59  		fmt.Println("Executing child -- first test (expecting error)")
    60  		err := runChild()
    61  		if err == nil {
    62  			fmt.Println("Expecting error from child")
    63  		} else if err.Error() != "exit status 10" {
    64  			fmt.Println("Got unexpected error from child:", err)
    65  		} else {
    66  			fmt.Printf("Got error from child: %s (expected)\n", err)
    67  		}
    68  	}
    69  
    70  	err = stor.Close()
    71  	if err != nil {
    72  		fmt.Printf("Error when closing storage: %s", err)
    73  		os.Exit(11)
    74  	}
    75  
    76  	if !child {
    77  		fmt.Println("Executing child -- second test")
    78  		err := runChild()
    79  		if err != nil {
    80  			fmt.Println("Got unexpected error from child:", err)
    81  		}
    82  	}
    83  
    84  	os.RemoveAll(filename)
    85  }