FILE / ScuroNeko/mtg

ipblocklist/firehol_test.go

Исходный файл и его история в репозитории.
FILE 0274b3436a6d27cd90ad4ef1cd64148edcd9a9d2
Files
mtg/ipblocklist/firehol_test.go
T
2021-04-02 21:32:06 +03:00

149 lines
3.3 KiB
Go

package ipblocklist_test
import (
"io"
"net"
"net/http"
"net/http/httptest"
"os"
"path/filepath"
"testing"
"time"
"github.com/9seconds/mtg/v2/internal/testlib"
"github.com/9seconds/mtg/v2/ipblocklist"
"github.com/9seconds/mtg/v2/logger"
"github.com/9seconds/mtg/v2/network"
"github.com/jarcoal/httpmock"
"github.com/stretchr/testify/mock"
"github.com/stretchr/testify/suite"
)
type FireholTestSuite struct {
suite.Suite
networkMock *testlib.MtglibNetworkMock
httpServer *httptest.Server
}
func (suite *FireholTestSuite) SetupSuite() {
mux := http.NewServeMux()
mux.HandleFunc("/", func(w http.ResponseWriter, req *http.Request) {
filefp, err := os.Open(filepath.Join("testdata", "remote_ipset.ipset"))
if err != nil {
panic(err)
}
defer filefp.Close()
io.Copy(w, filefp) // nolint: errcheck
})
suite.httpServer = httptest.NewServer(mux)
}
func (suite *FireholTestSuite) SetupTest() {
httpClient := &http.Client{}
suite.networkMock = &testlib.MtglibNetworkMock{}
httpmock.ActivateNonDefault(httpClient)
suite.networkMock.
On("MakeHTTPClient", mock.Anything).
Maybe().
Return(httpClient)
}
func (suite *FireholTestSuite) TearDownTest() {
suite.networkMock.AssertExpectations(suite.T())
httpmock.DeactivateAndReset()
}
func (suite *FireholTestSuite) TearDownSuite() {
suite.httpServer.Close()
}
func (suite *FireholTestSuite) TestLocalFail() {
blocklist, err := ipblocklist.NewFirehol(logger.NewNoopLogger(),
suite.networkMock, 2,
nil, []string{filepath.Join("testdata", "broken_ipset.ipset")})
suite.NoError(err)
go blocklist.Run(time.Hour)
time.Sleep(500 * time.Millisecond)
suite.False(blocklist.Contains(net.ParseIP("10.0.0.10")))
suite.False(blocklist.Contains(net.ParseIP("127.0.0.1")))
blocklist.Shutdown()
time.Sleep(500 * time.Millisecond)
}
func (suite *FireholTestSuite) TestLocalOk() {
blocklist, err := ipblocklist.NewFirehol(logger.NewNoopLogger(),
suite.networkMock, 2,
nil, []string{filepath.Join("testdata", "good_ipset.ipset")})
suite.NoError(err)
go blocklist.Run(time.Hour)
time.Sleep(500 * time.Millisecond)
suite.True(blocklist.Contains(net.ParseIP("10.0.0.10")))
suite.False(blocklist.Contains(net.ParseIP("127.0.0.1")))
blocklist.Shutdown()
time.Sleep(500 * time.Millisecond)
}
func (suite *FireholTestSuite) TestRemoteFail() {
blocklist, err := ipblocklist.NewFirehol(logger.NewNoopLogger(),
suite.networkMock, 2,
[]string{"https://google.com"}, nil)
suite.NoError(err)
go blocklist.Run(time.Hour)
time.Sleep(500 * time.Millisecond)
suite.False(blocklist.Contains(net.ParseIP("10.2.2.2")))
blocklist.Shutdown()
time.Sleep(500 * time.Millisecond)
}
func (suite *FireholTestSuite) TestMixed() {
dialer, _ := network.NewDefaultDialer(0, 0)
ntw, _ := network.NewNetwork(dialer, "mtg", "1.1.1.1", 0)
blocklist, err := ipblocklist.NewFirehol(logger.NewNoopLogger(),
ntw, 2,
[]string{
suite.httpServer.URL,
}, []string{
filepath.Join("testdata", "good_ipset.ipset"),
})
suite.NoError(err)
go blocklist.Run(time.Hour)
time.Sleep(500 * time.Millisecond)
suite.True(blocklist.Contains(net.ParseIP("10.2.2.2")))
suite.True(blocklist.Contains(net.ParseIP("10.1.0.100")))
blocklist.Shutdown()
time.Sleep(500 * time.Millisecond)
}
func TestFirehol(t *testing.T) {
t.Parallel()
suite.Run(t, &FireholTestSuite{})
}