package home import ( "fmt" "net" "net/http" "os" "testing" "time" "github.com/stretchr/testify/assert" ) func testStartFilterListener() net.Listener { http.HandleFunc("/filters/1.txt", func(w http.ResponseWriter, r *http.Request) { content := `||example.org^$third-party # Inline comment example ||example.com^$third-party 0.0.0.0 example.com ` _, _ = w.Write([]byte(content)) }) listener, err := net.Listen("tcp", ":0") if err != nil { panic(err) } go func() { _ = http.Serve(listener, nil) }() return listener } func TestFilters(t *testing.T) { l := testStartFilterListener() defer func() { _ = l.Close() }() dir := prepareTestDir() defer func() { _ = os.RemoveAll(dir) }() Context = homeContext{} Context.workDir = dir Context.client = &http.Client{ Timeout: 5 * time.Second, } Context.filters.Init() f := filter{ URL: fmt.Sprintf("http://127.0.0.1:%d/filters/1.txt", l.Addr().(*net.TCPAddr).Port), } // download ok, err := Context.filters.update(&f) assert.Equal(t, nil, err) assert.True(t, ok) assert.Equal(t, 3, f.RulesCount) // refresh ok, err = Context.filters.update(&f) assert.True(t, !ok && err == nil) err = Context.filters.load(&f) assert.True(t, err == nil) f.unload() _ = os.Remove(f.Path()) }