github.com/webx-top/com@v1.2.12/test/monitor/monitor_test.go (about) 1 package main 2 3 import ( 4 "fmt" 5 "log" 6 "os" 7 "strings" 8 "sync" 9 "testing" 10 "time" 11 12 "github.com/webx-top/com" 13 ) 14 15 func newLogWriter() *logWriter { 16 return &logWriter{ 17 b: []byte{}, 18 } 19 } 20 21 type logWriter struct { 22 b []byte 23 l sync.RWMutex 24 } 25 26 func (l *logWriter) Write(b []byte) (n int, e error) { 27 l.b = append(l.b, b...) 28 return len(b), nil 29 } 30 31 func (l *logWriter) String() string { 32 l.l.Lock() 33 r := string(l.b) 34 l.b = []byte{} 35 l.l.Unlock() 36 return r 37 } 38 39 func TestMonitor(t *testing.T) { 40 testDataDir := `../../testdata` 41 var err error 42 w := newLogWriter() 43 log.SetOutput(w) 44 os.Mkdir(testDataDir, os.ModePerm) 45 me := &com.MonitorEvent{ 46 Debug: true, 47 Create: func(file string) { 48 fmt.Println(`create----------->`, file) 49 }, 50 Delete: func(file string) { 51 fmt.Println(`delete----------->`, file) 52 }, 53 Modify: func(file string) { 54 fmt.Println(`modify----------->`, file) 55 }, 56 Chmod: func(file string) { 57 fmt.Println(`chmod----------->`, file) 58 }, 59 Rename: func(file string) { 60 fmt.Println(`rename----------->`, file) 61 }, 62 } 63 me.Watch() 64 me.AddDir(testDataDir) 65 time.Sleep(time.Second * 1) 66 67 fmt.Println(``) 68 fmt.Println(`CREATE: ` + testDataDir + `/aa`) 69 os.Mkdir(testDataDir+`/aa`, 0666) 70 time.Sleep(time.Second * 1) 71 s := w.String() 72 if !strings.HasSuffix(strings.TrimSpace(s), `: CREATE`) { 73 fmt.Print(`[log]`, s) 74 fmt.Println(`Fail: CREATE`) 75 } 76 77 fmt.Println(``) 78 fmt.Println(`CHMOD: ` + testDataDir + `/aa`) 79 os.Chmod(testDataDir+`/aa`, os.ModePerm) 80 time.Sleep(time.Second * 1) 81 s = w.String() 82 if !strings.Contains(s, `: CHMOD`) { 83 fmt.Print(`[log]`, s) 84 fmt.Println(`Fail: CHMOD`) 85 } 86 87 fmt.Println(``) 88 fmt.Println(`WRITE: ` + testDataDir + `/aa/a.log`) 89 err = os.WriteFile(testDataDir+`/aa/a.log`, []byte(`test`), 0666) 90 if err != nil { 91 panic(err) 92 } 93 time.Sleep(time.Second * 1) 94 s = w.String() 95 if !strings.HasSuffix(strings.TrimSpace(s), `: CREATE`) { 96 fmt.Print(`[log]`, s) 97 fmt.Println(`Fail: CREATE`) 98 } 99 100 fmt.Println(``) 101 fmt.Println(`CHMOD: ` + testDataDir + `/aa/a.log`) 102 os.Chmod(testDataDir+`/aa/a.log`, os.ModePerm) 103 time.Sleep(time.Second * 1) 104 s = w.String() 105 if !strings.Contains(s, `: CHMOD`) { 106 fmt.Print(`[log]`, s) 107 fmt.Println(`Fail: CHMOD`) 108 } 109 110 fmt.Println(``) 111 fmt.Println(`CREATE: ` + testDataDir + `/bb`) 112 os.Mkdir(testDataDir+`/bb`, os.ModePerm) 113 time.Sleep(time.Second * 1) 114 s = w.String() 115 if !strings.HasSuffix(strings.TrimSpace(s), `: CREATE`) { 116 fmt.Print(`[log]`, s) 117 fmt.Println(`Fail: CREATE`) 118 } 119 120 fmt.Println(``) 121 fmt.Println(`WRITE: ` + testDataDir + `/bb/b.log`) 122 os.WriteFile(testDataDir+`/bb/b.log`, []byte(`test`), 0666) 123 time.Sleep(time.Second * 2) 124 s = w.String() 125 if !strings.HasSuffix(strings.TrimSpace(s), `: CREATE`) { 126 fmt.Print(`[log]`, s) 127 fmt.Println(`Fail: CREATE`) 128 } 129 130 fmt.Println(``) 131 fmt.Println(`RENAME: ` + testDataDir + `/bb/b.log`) 132 err = os.Rename(testDataDir+`/bb/b.log`, testDataDir+`/bb/bb.log`) 133 if err != nil { 134 panic(err) 135 } 136 time.Sleep(time.Second * 1) 137 s = w.String() 138 if !strings.Contains(s, `: RENAME`) { 139 fmt.Print(`[log]`, s) 140 fmt.Println(`Fail: RENAME`) 141 } 142 143 fmt.Println(``) 144 fmt.Println(`REMOVE: ` + testDataDir + `/bb/bb.log`) 145 os.Remove(testDataDir + `/bb/bb.log`) 146 time.Sleep(time.Second * 1) 147 s = w.String() 148 if !strings.Contains(s, `: REMOVE`) { 149 fmt.Print(`[log]`, s) 150 fmt.Println(`Fail: REMOVE`) 151 } 152 153 fmt.Println(``) 154 fmt.Println(`REMOVE: ` + testDataDir + `/bb`) 155 os.Remove(testDataDir + `/bb`) 156 time.Sleep(time.Second * 1) 157 s = w.String() 158 if !strings.Contains(s, `: REMOVE`) { 159 fmt.Print(`[log]`, s) 160 fmt.Println(`Fail: REMOVE`) 161 } 162 163 fmt.Println(``) 164 fmt.Println(`REMOVE: ` + testDataDir + `/aa/a.log`) 165 os.Remove(testDataDir + `/aa/a.log`) 166 time.Sleep(time.Second * 1) 167 s = w.String() 168 if !strings.Contains(s, `: REMOVE`) { 169 fmt.Print(`[log]`, s) 170 fmt.Println(`Fail: REMOVE`) 171 } 172 173 fmt.Println(``) 174 fmt.Println(`REMOVE: ` + testDataDir + ``) 175 os.RemoveAll(testDataDir + ``) 176 time.Sleep(time.Second * 1) 177 s = w.String() 178 if !strings.Contains(s, `: REMOVE`) { 179 fmt.Print(`[log]`, s) 180 fmt.Println(`Fail: REMOVE`) 181 } 182 }