github.com/ivotron/vio@v0.1.1-0.20160328072646-778e014d4dee/vio_test.go (about)

     1  package vio
     2  
     3  import (
     4  	"fmt"
     5  	"io/ioutil"
     6  	"os"
     7  	"strconv"
     8  	"testing"
     9  	"time"
    10  
    11  	"gopkg.in/ini.v1"
    12  
    13  	"github.com/stretchr/testify/assert"
    14  )
    15  
    16  func createAndSeedTestRepo(t *testing.T, repoPath string, filesToAdd []string) {
    17  	_, err := runCmd(repoPath, "git init")
    18  	assert.Nil(t, err)
    19  
    20  	err = ioutil.WriteFile(repoPath+"/README", []byte("foo\n"), 0644)
    21  	assert.Nil(t, err)
    22  
    23  	err = ioutil.WriteFile(repoPath+"/.gitignore", []byte(".snapshots\n"), 0644)
    24  	assert.Nil(t, err)
    25  
    26  	_, err = runCmd(repoPath, "git add *")
    27  	assert.Nil(t, err)
    28  
    29  	for _, file := range filesToAdd {
    30  		_, err = runCmd(repoPath, "git add "+file)
    31  		assert.Nil(t, err)
    32  	}
    33  
    34  	_, err = runCmd(repoPath, "git commit -m yeah")
    35  	assert.Nil(t, err)
    36  
    37  	return
    38  }
    39  
    40  func testCmdInitPosix(t *testing.T, snapsPath string) {
    41  	err := Init(snapsPath, "posix")
    42  	assert.Nil(t, err)
    43  	_, err = os.Stat(".vioconfig")
    44  	assert.Nil(t, err)
    45  	cfg, err := ini.Load(".vioconfig")
    46  	assert.Nil(t, err)
    47  	assert.NotNil(t, cfg)
    48  	assert.Equal(t, cfg.Section("").Key("snapshots_path").String(), snapsPath)
    49  }
    50  
    51  func TestCmdInitPosixRelative(t *testing.T) {
    52  	path, err := ioutil.TempDir("", "testing")
    53  	assert.Nil(t, err)
    54  	assert.Nil(t, os.Chdir(path))
    55  	createAndSeedTestRepo(t, path, []string{})
    56  	testCmdInitPosix(t, ".snapshots")
    57  }
    58  func TestCmdInitPosixAbsolute(t *testing.T) {
    59  	path, err := ioutil.TempDir("", "testing")
    60  	assert.Nil(t, err)
    61  	assert.Nil(t, os.Chdir(path))
    62  	createAndSeedTestRepo(t, path, []string{})
    63  	testCmdInitPosix(t, path+"/.snapshots")
    64  }
    65  func TestCmdCommitPosix(t *testing.T) {
    66  	path, err := ioutil.TempDir("", "testing")
    67  	assert.Nil(t, os.Chdir(path))
    68  	createAndSeedTestRepo(t, path, []string{})
    69  	err = Init(".snapshots", "posix")
    70  	assert.Nil(t, err)
    71  	err = ioutil.WriteFile(path+"/bar", []byte("yeah"), 0644)
    72  	assert.Nil(t, err)
    73  	err = ioutil.WriteFile(path+"/toz", []byte("ok"), 0644)
    74  	assert.Nil(t, err)
    75  	err = Commit("msg", "{}")
    76  	assert.Nil(t, err)
    77  }
    78  func TestCmdCommitPosixWithMeta(t *testing.T) {
    79  	path, err := ioutil.TempDir("", "testing")
    80  	assert.Nil(t, os.Chdir(path))
    81  	createAndSeedTestRepo(t, path, []string{})
    82  	err = Init(".snapshots", "posix")
    83  	assert.Nil(t, err)
    84  	err = ioutil.WriteFile(path+"/bar", []byte("yeah"), 0644)
    85  	assert.Nil(t, err)
    86  	err = ioutil.WriteFile(path+"/toz", []byte("ok"), 0644)
    87  	assert.Nil(t, err)
    88  	err = Commit("commit message", "{\"foo\": \"bar\", \"hello\":\"goodbye\"}")
    89  	assert.Nil(t, err)
    90  }
    91  
    92  func TestVersionToString(t *testing.T) {
    93  	v := NewVersion("1234567890")
    94  	assert.NotNil(t, v)
    95  	assert.Equal(t, fmt.Sprintf("%v", v), "1234567890#"+fmt.Sprint(v.timestamp.Unix())+",{}")
    96  
    97  	ts_str := "1405544146"
    98  	v = NewVersion("1234567890#" + ts_str)
    99  	i, err := strconv.ParseInt(ts_str, 10, 64)
   100  	assert.Nil(t, err)
   101  	ts := time.Unix(i, 0)
   102  	assert.Nil(t, err)
   103  	assert.NotNil(t, ts)
   104  	assert.NotNil(t, v)
   105  	assert.Equal(t, fmt.Sprintf("%v", v), "1234567890#"+ts_str+",{}")
   106  }
   107  
   108  func TestContainsVersion(t *testing.T) {
   109  	v1 := NewVersion("1234567890#1405544146")
   110  	assert.NotNil(t, v1)
   111  	v2 := NewVersion("5713943128#2435869343")
   112  	assert.NotNil(t, v2)
   113  
   114  	var vs []version
   115  	assert.False(t, ContainsVersion(vs, v1))
   116  	vs = append(vs, *NewVersion("1234567890#1405544146"))
   117  	assert.Equal(t, len(vs), 1)
   118  	assert.True(t, ContainsVersion(vs, v1))
   119  	assert.False(t, ContainsVersion(vs, v2))
   120  	vs = append(vs, *NewVersion("5713943128#2435869343"))
   121  	assert.True(t, ContainsVersion(vs, v1))
   122  	assert.True(t, ContainsVersion(vs, v2))
   123  }
   124  
   125  func TestVersionMeta(t *testing.T) {
   126  	v := NewVersion("1234567890")
   127  	assert.NotNil(t, v)
   128  	assert.Equal(t, v.meta, map[string]string{})
   129  
   130  	meta := map[string]string{"foo": "bar", "hello": "goodbye"}
   131  	v = NewVersionWithMeta("1234567890", meta)
   132  	assert.NotNil(t, v)
   133  	assert.Equal(t, v.meta, meta)
   134  }