2016-03-29 17:54:23 +02:00
|
|
|
// Copyright 2016 The Chihaya Authors. All rights reserved.
|
|
|
|
// Use of this source code is governed by the BSD 2-Clause license,
|
|
|
|
// which can be found in the LICENSE file.
|
|
|
|
|
|
|
|
package infohash
|
|
|
|
|
|
|
|
import (
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
|
|
|
|
|
|
"github.com/chihaya/chihaya"
|
2016-06-19 18:49:43 +02:00
|
|
|
"github.com/chihaya/chihaya/pkg/stopper"
|
2016-03-29 17:54:23 +02:00
|
|
|
"github.com/chihaya/chihaya/server/store"
|
|
|
|
"github.com/chihaya/chihaya/tracker"
|
|
|
|
)
|
|
|
|
|
2016-04-07 16:23:57 +02:00
|
|
|
type storeMock struct {
|
|
|
|
strings map[string]struct{}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (ss *storeMock) PutString(s string) error {
|
|
|
|
ss.strings[s] = struct{}{}
|
|
|
|
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func (ss *storeMock) HasString(s string) (bool, error) {
|
|
|
|
_, ok := ss.strings[s]
|
|
|
|
|
|
|
|
return ok, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func (ss *storeMock) RemoveString(s string) error {
|
|
|
|
delete(ss.strings, s)
|
|
|
|
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
2016-06-19 18:49:43 +02:00
|
|
|
func (ss *storeMock) Stop() <-chan error {
|
|
|
|
return stopper.AlreadyStopped
|
|
|
|
}
|
|
|
|
|
2016-04-07 16:23:57 +02:00
|
|
|
var mock store.StringStore = &storeMock{
|
|
|
|
strings: make(map[string]struct{}),
|
|
|
|
}
|
2016-03-29 17:54:23 +02:00
|
|
|
|
2016-05-17 05:48:23 +02:00
|
|
|
var (
|
|
|
|
ih1 = chihaya.InfoHash([20]byte{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0})
|
|
|
|
ih2 = chihaya.InfoHash([20]byte{2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0})
|
|
|
|
)
|
|
|
|
|
2016-03-29 17:54:23 +02:00
|
|
|
func TestASetUp(t *testing.T) {
|
2016-04-07 16:23:57 +02:00
|
|
|
mustGetStore = func() store.StringStore {
|
|
|
|
return mock
|
2016-03-29 17:54:23 +02:00
|
|
|
}
|
|
|
|
|
2016-05-17 05:48:23 +02:00
|
|
|
mustGetStore().PutString(PrefixInfohash + string(ih1[:]))
|
2016-03-29 17:54:23 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
func TestBlacklistAnnounceMiddleware(t *testing.T) {
|
|
|
|
var (
|
|
|
|
achain tracker.AnnounceChain
|
|
|
|
req chihaya.AnnounceRequest
|
|
|
|
resp chihaya.AnnounceResponse
|
|
|
|
)
|
|
|
|
|
|
|
|
achain.Append(blacklistAnnounceInfohash)
|
|
|
|
handler := achain.Handler()
|
|
|
|
|
|
|
|
err := handler(nil, &req, &resp)
|
|
|
|
assert.Nil(t, err)
|
|
|
|
|
2016-05-17 05:48:23 +02:00
|
|
|
req.InfoHash = chihaya.InfoHash(ih1)
|
2016-03-29 17:54:23 +02:00
|
|
|
err = handler(nil, &req, &resp)
|
|
|
|
assert.Equal(t, ErrBlockedInfohash, err)
|
|
|
|
|
2016-05-17 05:48:23 +02:00
|
|
|
req.InfoHash = chihaya.InfoHash(ih2)
|
2016-03-29 17:54:23 +02:00
|
|
|
err = handler(nil, &req, &resp)
|
|
|
|
assert.Nil(t, err)
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestBlacklistScrapeMiddlewareBlock(t *testing.T) {
|
|
|
|
var (
|
|
|
|
schain tracker.ScrapeChain
|
|
|
|
req chihaya.ScrapeRequest
|
|
|
|
resp chihaya.ScrapeResponse
|
|
|
|
)
|
|
|
|
|
|
|
|
mw, err := blacklistScrapeInfohash(chihaya.MiddlewareConfig{
|
|
|
|
Name: "blacklist_infohash",
|
|
|
|
Config: Config{
|
|
|
|
Mode: ModeBlock,
|
|
|
|
},
|
|
|
|
})
|
|
|
|
assert.Nil(t, err)
|
|
|
|
schain.Append(mw)
|
|
|
|
handler := schain.Handler()
|
|
|
|
|
|
|
|
err = handler(nil, &req, &resp)
|
|
|
|
assert.Nil(t, err)
|
|
|
|
|
2016-05-17 05:48:23 +02:00
|
|
|
req.InfoHashes = []chihaya.InfoHash{chihaya.InfoHash(ih1), chihaya.InfoHash(ih2)}
|
2016-03-29 17:54:23 +02:00
|
|
|
err = handler(nil, &req, &resp)
|
|
|
|
assert.Equal(t, ErrBlockedInfohash, err)
|
|
|
|
|
2016-05-17 05:48:23 +02:00
|
|
|
req.InfoHashes = []chihaya.InfoHash{chihaya.InfoHash(ih2)}
|
2016-03-29 17:54:23 +02:00
|
|
|
err = handler(nil, &req, &resp)
|
|
|
|
assert.Nil(t, err)
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestBlacklistScrapeMiddlewareFilter(t *testing.T) {
|
|
|
|
var (
|
|
|
|
schain tracker.ScrapeChain
|
|
|
|
req chihaya.ScrapeRequest
|
|
|
|
resp chihaya.ScrapeResponse
|
|
|
|
)
|
|
|
|
|
|
|
|
mw, err := blacklistScrapeInfohash(chihaya.MiddlewareConfig{
|
|
|
|
Name: "blacklist_infohash",
|
|
|
|
Config: Config{
|
|
|
|
Mode: ModeFilter,
|
|
|
|
},
|
|
|
|
})
|
|
|
|
assert.Nil(t, err)
|
|
|
|
schain.Append(mw)
|
|
|
|
handler := schain.Handler()
|
|
|
|
|
|
|
|
err = handler(nil, &req, &resp)
|
|
|
|
assert.Nil(t, err)
|
|
|
|
|
2016-05-17 05:48:23 +02:00
|
|
|
req.InfoHashes = []chihaya.InfoHash{chihaya.InfoHash(ih1), chihaya.InfoHash(ih2)}
|
2016-03-29 17:54:23 +02:00
|
|
|
err = handler(nil, &req, &resp)
|
|
|
|
assert.Nil(t, err)
|
2016-05-17 05:48:23 +02:00
|
|
|
assert.Equal(t, []chihaya.InfoHash{chihaya.InfoHash(ih2)}, req.InfoHashes)
|
2016-03-29 17:54:23 +02:00
|
|
|
|
2016-05-17 05:48:23 +02:00
|
|
|
req.InfoHashes = []chihaya.InfoHash{chihaya.InfoHash(ih2)}
|
2016-03-29 17:54:23 +02:00
|
|
|
err = handler(nil, &req, &resp)
|
|
|
|
assert.Nil(t, err)
|
|
|
|
}
|