storj/pkg/accounting/tally/tally_test.go
2019-03-19 14:56:59 +02:00

83 lines
2.5 KiB
Go

// Copyright (C) 2019 Storj Labs, Inc.
// See LICENSE for copying information.
package tally_test
import (
"context"
"testing"
"time"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"storj.io/storj/internal/testcontext"
"storj.io/storj/internal/testplanet"
"storj.io/storj/pkg/bwagreement/testbwagreement"
"storj.io/storj/pkg/pb"
"storj.io/storj/pkg/piecestore/psserver/psdb"
"storj.io/storj/satellite"
)
func TestQueryNoAgreements(t *testing.T) {
testplanet.Run(t, testplanet.Config{
SatelliteCount: 1, StorageNodeCount: 1, UplinkCount: 1,
}, func(t *testing.T, ctx *testcontext.Context, planet *testplanet.Planet) {
tally := planet.Satellites[0].Accounting.Tally
_, bwTotals, err := tally.QueryBW(ctx)
require.NoError(t, err)
require.Len(t, bwTotals, 0)
})
}
func TestQueryWithBw(t *testing.T) {
testplanet.Run(t, testplanet.Config{
SatelliteCount: 1, StorageNodeCount: 1, UplinkCount: 1,
}, func(t *testing.T, ctx *testcontext.Context, planet *testplanet.Planet) {
db := planet.Satellites[0].DB
sendGeneratedAgreements(ctx, t, db, planet)
tally := planet.Satellites[0].Accounting.Tally
tallyEnd, bwTotals, err := tally.QueryBW(ctx)
require.NoError(t, err)
require.Len(t, bwTotals, 1)
for id, nodeTotals := range bwTotals {
require.Len(t, nodeTotals, 5)
for _, total := range nodeTotals {
require.Equal(t, planet.StorageNodes[0].Identity.ID, id)
require.Equal(t, int64(1000), total)
}
}
err = tally.SaveBWRaw(ctx, tallyEnd, time.Now().UTC(), bwTotals)
require.NoError(t, err)
})
}
func sendGeneratedAgreements(ctx context.Context, t *testing.T, db satellite.DB, planet *testplanet.Planet) {
satID := planet.Satellites[0].Identity
upID := planet.Uplinks[0].Identity
snID := planet.StorageNodes[0].Identity
sender := planet.StorageNodes[0].Agreements.Sender
actions := []pb.BandwidthAction{
pb.BandwidthAction_PUT,
pb.BandwidthAction_GET,
pb.BandwidthAction_GET_AUDIT,
pb.BandwidthAction_GET_REPAIR,
pb.BandwidthAction_PUT_REPAIR,
}
agreements := make([]*psdb.Agreement, len(actions))
for i, action := range actions {
pba, err := testbwagreement.GenerateOrderLimit(action, satID, upID, time.Hour)
require.NoError(t, err)
err = db.CertDB().SavePublicKey(ctx, pba.UplinkId, upID.Leaf.PublicKey)
assert.NoError(t, err)
rba, err := testbwagreement.GenerateOrder(pba, snID.ID, upID, 1000)
require.NoError(t, err)
agreements[i] = &psdb.Agreement{Agreement: *rba}
}
sender.SettleAgreements(ctx, satID.ID, agreements)
}