github.com/keysonzzz/kmg@v0.0.0-20151121023212-05317bfd7d39/kmgCache/FileChangeCache_test.go (about)

     1  package kmgCache
     2  
     3  import (
     4  	"testing"
     5  	"time"
     6  
     7  	"github.com/bronze1man/kmg/kmgFile"
     8  	"github.com/bronze1man/kmg/kmgTest"
     9  	"github.com/bronze1man/kmg/kmgCmd"
    10  )
    11  
    12  func TestFileChangeCacheOneFile(t *testing.T) {
    13  	//可以递归 遍历文件
    14  	//缓存数据文件不存在,没有问题
    15  	//指定的文件不存在,也没有问题
    16  	callLog := make([]string, 32)
    17  	//指定的文件不存在
    18  	kmgFile.MustDeleteFile(getFileChangeCachePath("test_file_change_cache"))
    19  	kmgFile.MustDeleteFile("testFile/notExist")
    20  
    21  	MustFileChangeCache("test_file_change_cache", []string{
    22  		"testFile/notExist",
    23  	}, func() {
    24  		callLog[1] = "notExist"
    25  		kmgFile.MustWriteFileWithMkdir("testFile/notExist", []byte("1"))
    26  	})
    27  	kmgTest.Equal(callLog[1], "notExist")
    28  
    29  	MustFileChangeCache("test_file_change_cache", []string{
    30  		"testFile/notExist",
    31  	}, func() {
    32  		callLog[2] = "notExist"
    33  	})
    34  	kmgTest.Equal(callLog[2], "")
    35  
    36  	time.Sleep(time.Second * 1)
    37  
    38  	kmgFile.MustWriteFile("testFile/notExist", []byte("2"))
    39  	MustFileChangeCache("test_file_change_cache", []string{
    40  		"testFile/notExist",
    41  	}, func() {
    42  		callLog[3] = "notExist"
    43  	})
    44  	kmgTest.Equal(callLog[3], "notExist")
    45  }
    46  
    47  func TestFileChangeCacheOneDir(t *testing.T) {
    48  	callLog := make([]string, 32)
    49  	//递归可用
    50  	kmgFile.MustDeleteFile(getFileChangeCachePath("test_file_change_cache"))
    51  	kmgFile.MustMkdirAll("testFile/d1/d2")
    52  	kmgFile.MustWriteFile("testFile/d1/d2/f3", []byte("1"))
    53  	MustFileChangeCache("test_file_change_cache", []string{
    54  		"testFile/d1",
    55  	}, func() {
    56  		callLog[3] = "f3"
    57  	})
    58  	kmgTest.Equal(callLog[3], "f3")
    59  
    60  	MustFileChangeCache("test_file_change_cache", []string{
    61  		"testFile/d1",
    62  	}, func() {
    63  		callLog[4] = "f3"
    64  	})
    65  	kmgTest.Equal(callLog[4], "")
    66  
    67  	time.Sleep(time.Second * 1)
    68  	kmgFile.MustWriteFile("testFile/d1/d2/f3", []byte("2"))
    69  	MustFileChangeCache("test_file_change_cache", []string{
    70  		"testFile/d1",
    71  	}, func() {
    72  		callLog[5] = "f3"
    73  	})
    74  	kmgTest.Equal(callLog[5], "f3")
    75  }
    76  
    77  func TestFileMd5ChangeCacheOneDir(t *testing.T) {
    78  	callLog := make([]string, 32)
    79  	//递归可用
    80  	kmgFile.MustDeleteFile(getFileChangeCachePath("test_file_change_cache"))
    81  	kmgFile.MustDelete("testFile/d1")
    82  
    83  	kmgFile.MustMkdirAll("testFile/d1/d2")
    84  	kmgFile.MustWriteFile("testFile/d1/d2/f3", []byte("1"))
    85  	MustMd5FileChangeCache("test_file_change_cache", []string{
    86  		"testFile/d1",
    87  	}, func() {
    88  		callLog[3] = "f3"
    89  	})
    90  	kmgTest.Equal(callLog[3], "f3")
    91  
    92  	//没有碰过任何东西,缓存有效
    93  	MustMd5FileChangeCache("test_file_change_cache", []string{
    94  		"testFile/d1",
    95  	}, func() {
    96  		callLog[4] = "f3"
    97  	})
    98  	kmgTest.Equal(callLog[4], "")
    99  
   100  	//修改文件内容,缓存应该无效
   101  	kmgFile.MustWriteFile("testFile/d1/d2/f3", []byte("2"))
   102  	MustMd5FileChangeCache("test_file_change_cache", []string{
   103  		"testFile/d1",
   104  	}, func() {
   105  		callLog[5] = "f3"
   106  	})
   107  	kmgTest.Equal(callLog[5], "f3")
   108  
   109  	//删除文件,缓存应该无效
   110  	kmgFile.MustDelete("testFile/d1/d2/f3")
   111  	MustMd5FileChangeCache("test_file_change_cache", []string{
   112  		"testFile/d1",
   113  	}, func() {
   114  		callLog[6] = "f4"
   115  	})
   116  	kmgTest.Equal(callLog[6], "f4")
   117  
   118  	//添加文件,缓存应该无效
   119  	kmgFile.MustWriteFile("testFile/d1/d2/f4", []byte("3"))
   120  	MustMd5FileChangeCache("test_file_change_cache", []string{
   121  		"testFile/d1",
   122  	}, func() {
   123  		callLog[7] = "f4"
   124  	})
   125  	kmgTest.Equal(callLog[7], "f4")
   126  
   127  	//读取文件,缓存有效
   128  	kmgFile.MustReadFile("testFile/d1/d2/f4")
   129  	MustMd5FileChangeCache("test_file_change_cache", []string{
   130  		"testFile/d1",
   131  	}, func() {
   132  		callLog[8] = "f4"
   133  	})
   134  	kmgTest.Equal(callLog[8], "")
   135  
   136  	//创建目录,缓存有效
   137  	kmgFile.MustMkdir("testFile/d1/d2/f5")
   138  	MustMd5FileChangeCache("test_file_change_cache", []string{
   139  		"testFile/d1",
   140  	}, func() {
   141  		callLog[9] = "f4"
   142  	})
   143  	kmgTest.Equal(callLog[9], "")
   144  }
   145  
   146  func TestFileMd5ChangeCacheSymlink(t *testing.T){
   147  	callLog := make([]string, 32)
   148  	//递归可用
   149  	kmgFile.MustDeleteFile(getFileChangeCachePath("test_file_change_cache"))
   150  	kmgFile.MustDelete("testFile")
   151  	kmgFile.MustWriteFileWithMkdir("testFile/d1/d2",[]byte("1"))
   152  	kmgCmd.MustRun("ln -s d1 testFile/d3")
   153  	MustMd5FileChangeCache("test_file_change_cache", []string{
   154  		"testFile",
   155  	}, func() {
   156  		callLog[0] = "f3"
   157  	})
   158  	kmgTest.Equal(callLog[0], "f3")
   159  	MustMd5FileChangeCache("test_file_change_cache", []string{
   160  		"testFile",
   161  	}, func() {
   162  		callLog[1] = "f3"
   163  	})
   164  	kmgTest.Equal(callLog[1], "")
   165  }