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  }