Feature: flush fakeip pool
This commit is contained in:
@ -53,3 +53,8 @@ func (c *cachefileStore) Exist(ip net.IP) bool {
|
||||
// CloneTo implements store.CloneTo
|
||||
// already persistence
|
||||
func (c *cachefileStore) CloneTo(store store) {}
|
||||
|
||||
// FlushFakeIP implements store.FlushFakeIP
|
||||
func (c *cachefileStore) FlushFakeIP() error {
|
||||
return c.cache.FlushFakeIP()
|
||||
}
|
||||
|
@ -67,3 +67,8 @@ func (m *memoryStore) CloneTo(store store) {
|
||||
m.cache.CloneTo(ms.cache)
|
||||
}
|
||||
}
|
||||
|
||||
// FlushFakeIP implements store.FlushFakeIP
|
||||
func (m *memoryStore) FlushFakeIP() error {
|
||||
return m.cache.Clear()
|
||||
}
|
||||
|
@ -18,6 +18,7 @@ type store interface {
|
||||
DelByIP(ip net.IP)
|
||||
Exist(ip net.IP) bool
|
||||
CloneTo(store)
|
||||
FlushFakeIP() error
|
||||
}
|
||||
|
||||
// Pool is a implementation about fake ip generator without storage
|
||||
@ -120,6 +121,10 @@ func (p *Pool) get(host string) net.IP {
|
||||
return ip
|
||||
}
|
||||
|
||||
func (p *Pool) FlushFakeIP() error {
|
||||
return p.store.FlushFakeIP()
|
||||
}
|
||||
|
||||
func ipToUint(ip net.IP) uint32 {
|
||||
v := uint32(ip[0]) << 24
|
||||
v += uint32(ip[1]) << 16
|
||||
|
@ -193,3 +193,59 @@ func TestPool_Error(t *testing.T) {
|
||||
|
||||
assert.Error(t, err)
|
||||
}
|
||||
|
||||
func TestPool_FlushFileCache(t *testing.T) {
|
||||
_, ipnet, _ := net.ParseCIDR("192.168.0.1/28")
|
||||
pools, tempfile, err := createPools(Options{
|
||||
IPNet: ipnet,
|
||||
Size: 10,
|
||||
})
|
||||
assert.Nil(t, err)
|
||||
defer os.Remove(tempfile)
|
||||
|
||||
for _, pool := range pools {
|
||||
foo := pool.Lookup("foo.com")
|
||||
bar := pool.Lookup("baz.com")
|
||||
bax := pool.Lookup("baz.com")
|
||||
fox := pool.Lookup("foo.com")
|
||||
|
||||
err = pool.FlushFakeIP()
|
||||
assert.Nil(t, err)
|
||||
|
||||
baz := pool.Lookup("foo.com")
|
||||
next := pool.Lookup("baz.com")
|
||||
nero := pool.Lookup("foo.com")
|
||||
|
||||
assert.Equal(t, foo, fox)
|
||||
assert.NotEqual(t, foo, baz)
|
||||
assert.Equal(t, bar, bax)
|
||||
assert.NotEqual(t, bar, next)
|
||||
assert.Equal(t, baz, nero)
|
||||
}
|
||||
}
|
||||
|
||||
func TestPool_FlushMemoryCache(t *testing.T) {
|
||||
_, ipnet, _ := net.ParseCIDR("192.168.0.1/28")
|
||||
pool, _ := New(Options{
|
||||
IPNet: ipnet,
|
||||
Size: 10,
|
||||
})
|
||||
|
||||
foo := pool.Lookup("foo.com")
|
||||
bar := pool.Lookup("baz.com")
|
||||
bax := pool.Lookup("baz.com")
|
||||
fox := pool.Lookup("foo.com")
|
||||
|
||||
err := pool.FlushFakeIP()
|
||||
assert.Nil(t, err)
|
||||
|
||||
baz := pool.Lookup("foo.com")
|
||||
next := pool.Lookup("baz.com")
|
||||
nero := pool.Lookup("foo.com")
|
||||
|
||||
assert.Equal(t, foo, fox)
|
||||
assert.NotEqual(t, foo, baz)
|
||||
assert.Equal(t, bar, bax)
|
||||
assert.NotEqual(t, bar, next)
|
||||
assert.Equal(t, baz, nero)
|
||||
}
|
||||
|
Reference in New Issue
Block a user