storj/storagenode/collector/service_test.go
2019-05-08 14:11:59 +03:00

70 lines
1.9 KiB
Go

// Copyright (C) 2019 Storj Labs, Inc.
// See LICENSE for copying information.
package collector_test
import (
"crypto/rand"
"testing"
"time"
"github.com/stretchr/testify/require"
"storj.io/storj/internal/memory"
"storj.io/storj/internal/testcontext"
"storj.io/storj/internal/testplanet"
)
func TestCollector(t *testing.T) {
testplanet.Run(t, testplanet.Config{
SatelliteCount: 1, StorageNodeCount: 3, UplinkCount: 1,
}, func(t *testing.T, ctx *testcontext.Context, planet *testplanet.Planet) {
for _, storageNode := range planet.StorageNodes {
// stop collector, so we can run it manually
storageNode.Collector.Loop.Pause()
// stop order sender because we will stop satellite later
storageNode.Storage2.Sender.Loop.Pause()
}
expectedData := make([]byte, 100*memory.KiB)
_, err := rand.Read(expectedData)
require.NoError(t, err)
// upload some data that expires in 8 days
err = planet.Uplinks[0].UploadWithExpiration(ctx,
planet.Satellites[0], "testbucket", "test/path",
expectedData, time.Now().Add(8*24*time.Hour))
require.NoError(t, err)
// stop planet to prevent audits
require.NoError(t, planet.StopPeer(planet.Satellites[0]))
collections := 0
// imagine we are 16 days in the future
for _, storageNode := range planet.StorageNodes {
pieceinfos := storageNode.DB.PieceInfo()
// verify that we actually have some data on storage nodes
used, err := pieceinfos.SpaceUsed(ctx)
require.NoError(t, err)
if used == 0 {
// this storage node didn't get picked for storing data
continue
}
// collect all the data
err = storageNode.Collector.Collect(ctx, time.Now().Add(16*24*time.Hour))
require.NoError(t, err)
// verify that we deleted everything
used, err = pieceinfos.SpaceUsed(ctx)
require.NoError(t, err)
require.Equal(t, int64(0), used)
collections++
}
require.NotZero(t, collections)
})
}