storj/lib/uplinkc/testdata_test.go
2019-10-07 14:03:58 +02:00

99 lines
2.3 KiB
Go

// Copyright (C) 2019 Storj Labs, Inc.
// See LICENSE for copying information.
package main
import (
"os"
"os/exec"
"path/filepath"
"testing"
"time"
"github.com/stretchr/testify/require"
"go.uber.org/zap/zapcore"
"go.uber.org/zap/zaptest"
"storj.io/storj/internal/testcontext"
"storj.io/storj/internal/testplanet"
)
func RunPlanet(t *testing.T, run func(ctx *testcontext.Context, planet *testplanet.Planet)) {
ctx := testcontext.New(t)
defer ctx.Cleanup()
planet, err := testplanet.NewCustom(
zaptest.NewLogger(t, zaptest.Level(zapcore.WarnLevel)),
testplanet.Config{
SatelliteCount: 1,
StorageNodeCount: 5,
UplinkCount: 1,
Reconfigure: testplanet.DisablePeerCAWhitelist,
},
)
require.NoError(t, err)
defer ctx.Check(planet.Shutdown)
planet.Start(ctx)
// make sure nodes are refreshed in db
planet.Satellites[0].Discovery.Service.Refresh.TriggerWait()
run(ctx, planet)
}
func TestC(t *testing.T) {
ctx := testcontext.NewWithTimeout(t, 5*time.Minute)
defer ctx.Cleanup()
libuplink_include := ctx.CompileShared(t, "uplink", "storj.io/storj/lib/uplinkc")
currentdir, err := os.Getwd()
require.NoError(t, err)
definition := testcontext.Include{
Header: filepath.Join(currentdir, "uplink_definitions.h"),
}
ctests, err := filepath.Glob(filepath.Join("testdata", "*_test.c"))
require.NoError(t, err)
t.Run("ALL", func(t *testing.T) {
for _, ctest := range ctests {
ctest := ctest
testName := filepath.Base(ctest)
t.Run(testName, func(t *testing.T) {
t.Parallel()
testexe := ctx.CompileC(t, testcontext.CompileCOptions{
Dest: testName,
Sources: []string{ctest},
Includes: []testcontext.Include{
libuplink_include,
definition,
testcontext.CLibMath,
},
})
RunPlanet(t, func(ctx *testcontext.Context, planet *testplanet.Planet) {
cmd := exec.Command(testexe)
cmd.Dir = filepath.Dir(testexe)
cmd.Env = append(os.Environ(),
"SATELLITE_0_ADDR="+planet.Satellites[0].Addr(),
"GATEWAY_0_API_KEY="+planet.Uplinks[0].APIKey[planet.Satellites[0].ID()].Serialize(),
"TMP_DIR"+ctx.Dir("c_temp"),
)
out, err := cmd.CombinedOutput()
if err != nil {
t.Error(string(out))
t.Fatal(err)
} else {
t.Log(string(out))
}
})
})
}
})
}