]> git.lizzy.rs Git - go-fscache.git/blob - cachestat_test.go
Replace obsolete lock package
[go-fscache.git] / cachestat_test.go
1 package fscache_test
2
3 import (
4         "github.com/EliasFleckenstein03/go-fscache"
5         "math/rand"
6         "testing"
7         "time"
8 )
9
10 func init() {
11         rand.Seed(time.Now().UnixNano())
12 }
13
14 func TestCache_Stat(T *testing.T) {
15         cd, err := fscache.NewCacheDir(".testdir")
16         if err != nil {
17                 T.Fatal(err)
18                 return
19         }
20
21         err = cd.Touch("test", "stat")
22         if err != nil {
23                 T.Fatal(err)
24                 return
25         }
26
27         stat, err := cd.Stat("test", "stat")
28         if err != nil {
29                 T.Fatal(err)
30                 return
31         }
32
33         T.Log("IsDir:", stat.IsDir())
34         T.Log("ModTime:", stat.ModTime())
35         T.Log("Name: " + stat.Name())
36         T.Log("Size:", stat.Size(), "bytes")
37
38         if stat.IsDir() || stat.ModTime().IsZero() || stat.Name() != "stat" || stat.Size() != 0 {
39                 T.Error("Stat returned unexpected data")
40         }
41 }
42
43 func TestCache_Touch(T *testing.T) {
44         cd, err := fscache.NewCacheDir(".testdir")
45         if err != nil {
46                 T.Fatal(err)
47                 return
48         }
49
50         err = cd.Touch("test", "touch", "file")
51         if err != nil {
52                 T.Fatal(err)
53                 return
54         }
55
56         stat, err := cd.Stat("test", "touch")
57         if err != nil {
58                 T.Fatal(err)
59                 return
60         }
61
62         if !stat.IsDir() {
63                 T.Error("Expected touch to be a dir, file found")
64         }
65
66         // can be anything -- just make a nonblank file
67         size, err := cd.Set(stat.ModTime(), "test", "touch", "subdir", "file")
68         if err != nil {
69                 T.Fatal(err)
70                 return
71         }
72
73         stat, err = cd.Stat("test", "touch", "subdir", "file")
74         if err != nil {
75                 T.Fatal(err)
76                 return
77         }
78         if stat.Size() != size {
79                 panic("File modified outside of test")
80         }
81
82         T.Log("Waiting 5ms")
83         time.Sleep(5 * time.Millisecond)
84
85         err = cd.Touch("test", "touch", "subdir", "file")
86         if err != nil {
87                 T.Fatal(err)
88         }
89         stat2, err := cd.Stat("test", "touch", "subdir", "file")
90
91         if stat.Size() != stat2.Size() {
92                 T.Errorf("Touch modified the size")
93         }
94         if !stat2.ModTime().After(stat.ModTime()) {
95                 T.Errorf("Touch did not update timestamp (FAT filesystem?)")
96         }
97 }
98
99 func TestCache_Chtime(T *testing.T) {
100         cd, err := fscache.NewCacheDir(".testdir")
101         if err != nil {
102                 T.Fatal(err)
103                 return
104         }
105
106         err = cd.Touch("test", "chtime")
107         if err != nil {
108                 T.Fatal(err)
109                 return
110         }
111
112         stat, err := cd.Stat("test", "chtime")
113         if err != nil {
114                 T.Fatal(err)
115                 return
116         }
117
118         newTime := stat.ModTime().Add(-1 * 7 * 24 * time.Hour)
119
120         err = cd.Chtime(newTime, "test", "chtime")
121         if err != nil {
122                 T.Fatal(err)
123                 return
124         }
125
126         stat, err = cd.Stat("test", "chtime")
127         if err != nil {
128                 T.Fatal(err)
129                 return
130         }
131
132         if mtime := stat.ModTime(); !mtime.Equal(newTime) {
133                 T.Errorf("Expected mtime %q, got mtime %q", newTime, mtime)
134         }
135 }