github.com/quantumghost/awgo@v0.15.0/util/util_test.go (about)

     1  //
     2  // Copyright (c) 2016 Dean Jackson <deanishe@deanishe.net>
     3  //
     4  // MIT Licence. See http://opensource.org/licenses/MIT
     5  //
     6  // Created on 2016-05-23
     7  //
     8  
     9  package util
    10  
    11  import (
    12  	"io/ioutil"
    13  	"os"
    14  	"path/filepath"
    15  	"testing"
    16  )
    17  
    18  func inTempDir(fun func(dir string)) error {
    19  
    20  	curdir, err := os.Getwd()
    21  	if err != nil {
    22  		return err
    23  	}
    24  
    25  	dir, err := ioutil.TempDir("", "awgo-util-")
    26  	if err != nil {
    27  		return err
    28  	}
    29  
    30  	dir, err = filepath.EvalSymlinks(dir)
    31  	if err != nil {
    32  		return err
    33  	}
    34  
    35  	defer func() {
    36  		if err := os.RemoveAll(dir); err != nil {
    37  			panic(err)
    38  		}
    39  	}()
    40  
    41  	// Change to temporary directory
    42  	if err := os.Chdir(dir); err != nil {
    43  		return err
    44  	}
    45  
    46  	// Change back after we're done
    47  	defer func() {
    48  		if err := os.Chdir(curdir); err != nil {
    49  			panic(err)
    50  		}
    51  	}()
    52  
    53  	fun(dir)
    54  
    55  	return nil
    56  }
    57  
    58  func TestMustExist(t *testing.T) {
    59  
    60  	err := inTempDir(func(dir string) {
    61  
    62  		name := "testdir"
    63  
    64  		// Create directory
    65  		s := MustExist(name)
    66  		if s != name {
    67  			t.Errorf("Bad Dirname. Expected=%s, Got=%s", name, s)
    68  		}
    69  
    70  		if _, err := os.Stat(s); err != nil {
    71  			t.Errorf("Couldn't stat dir %#v: %v", s, err)
    72  		}
    73  
    74  		// Check path is as expected
    75  		p := filepath.Join(dir, name)
    76  		p2, err := filepath.Abs(s)
    77  		if err != nil {
    78  			t.Fatal(err)
    79  		}
    80  
    81  		if p != p2 {
    82  			t.Errorf("Bad Path. Expected=%v, Got=%v", p2, p)
    83  		}
    84  
    85  	})
    86  
    87  	if err != nil {
    88  		t.Fatal(err)
    89  	}
    90  }
    91  
    92  func TestPathExists(t *testing.T) {
    93  
    94  	err := inTempDir(func(dir string) {
    95  
    96  		name := "existingdir"
    97  		path := filepath.Join(dir, name)
    98  		badName := "nodir"
    99  		badPath := filepath.Join(dir, badName)
   100  
   101  		if err := os.MkdirAll(name, 0700); err != nil {
   102  			t.Fatal(err)
   103  		}
   104  
   105  		data := []struct {
   106  			p string
   107  			x bool
   108  		}{
   109  			{dir, true},
   110  			{name, true},
   111  			{path, true},
   112  			{badName, false},
   113  			{badPath, false},
   114  		}
   115  
   116  		for _, td := range data {
   117  			v := PathExists(td.p)
   118  			if v != td.x {
   119  				t.Errorf("Bad PathExists for %#v. Expected=%v, Got=%v", td.p, td.x, v)
   120  			}
   121  
   122  		}
   123  
   124  	})
   125  
   126  	if err != nil {
   127  		t.Fatal(err)
   128  	}
   129  }