2022-03-22 11:03:15 -04:00
|
|
|
//go:build integration
|
|
|
|
|
|
|
|
package integration
|
|
|
|
|
|
|
|
import (
|
|
|
|
"context"
|
|
|
|
"fmt"
|
|
|
|
"os"
|
|
|
|
"os/exec"
|
|
|
|
"testing"
|
|
|
|
|
2022-03-24 10:17:57 -04:00
|
|
|
"github.com/edgelesssys/constellation/mount/cryptmapper"
|
|
|
|
"github.com/edgelesssys/constellation/mount/kms"
|
2022-03-22 11:03:15 -04:00
|
|
|
"github.com/stretchr/testify/assert"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"k8s.io/klog"
|
|
|
|
)
|
|
|
|
|
|
|
|
const (
|
|
|
|
DevicePath string = "testDevice"
|
|
|
|
DeviceName string = "testDeviceName"
|
|
|
|
)
|
|
|
|
|
|
|
|
func setup() {
|
|
|
|
exec.Command("/bin/dd", "if=/dev/zero", fmt.Sprintf("of=%s", DevicePath), "bs=64M", "count=1").Run()
|
|
|
|
}
|
|
|
|
|
|
|
|
func teardown() {
|
|
|
|
exec.Command("/bin/rm", "-f", DevicePath).Run()
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestMain(m *testing.M) {
|
|
|
|
if os.Getuid() != 0 {
|
|
|
|
fmt.Printf("This test suite requires root privileges, as libcrypsetup uses the kernel's device mapper.\n")
|
|
|
|
os.Exit(1)
|
|
|
|
}
|
|
|
|
|
|
|
|
klog.InitFlags(nil)
|
|
|
|
defer klog.Flush()
|
|
|
|
|
|
|
|
result := m.Run()
|
|
|
|
os.Exit(result)
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestOpenAndClose(t *testing.T) {
|
|
|
|
assert := assert.New(t)
|
|
|
|
require := require.New(t)
|
|
|
|
setup()
|
|
|
|
defer teardown()
|
|
|
|
|
|
|
|
kms := kms.NewStaticKMS()
|
|
|
|
mapper := cryptmapper.New(kms, "", &cryptmapper.CryptDevice{})
|
|
|
|
|
|
|
|
newPath, err := mapper.OpenCryptDevice(context.Background(), DevicePath, DeviceName, false)
|
|
|
|
require.NoError(err)
|
|
|
|
assert.Equal(newPath, "/dev/mapper/"+DeviceName)
|
|
|
|
|
|
|
|
// assert crypt device got created
|
|
|
|
_, err = os.Stat(newPath)
|
|
|
|
assert.NoError(err)
|
|
|
|
// assert no integrity device got created
|
|
|
|
_, err = os.Stat(newPath + "_dif")
|
|
|
|
assert.True(os.IsNotExist(err))
|
|
|
|
|
|
|
|
assert.NoError(mapper.CloseCryptDevice(DeviceName))
|
|
|
|
|
|
|
|
// assert crypt device got removed
|
|
|
|
_, err = os.Stat(newPath)
|
|
|
|
assert.True(os.IsNotExist(err))
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestOpenAndCloseIntegrity(t *testing.T) {
|
|
|
|
assert := assert.New(t)
|
|
|
|
require := require.New(t)
|
|
|
|
setup()
|
|
|
|
defer teardown()
|
|
|
|
|
|
|
|
kms := kms.NewStaticKMS()
|
|
|
|
mapper := cryptmapper.New(kms, "", &cryptmapper.CryptDevice{})
|
|
|
|
|
|
|
|
newPath, err := mapper.OpenCryptDevice(context.Background(), DevicePath, DeviceName, true)
|
|
|
|
require.NoError(err)
|
|
|
|
assert.Equal(newPath, "/dev/mapper/"+DeviceName)
|
|
|
|
|
|
|
|
// assert crypt device got created
|
|
|
|
_, err = os.Stat(newPath)
|
|
|
|
assert.NoError(err)
|
|
|
|
// assert integrity device got created
|
|
|
|
_, err = os.Stat(newPath + "_dif")
|
|
|
|
assert.NoError(err)
|
|
|
|
|
|
|
|
assert.NoError(mapper.CloseCryptDevice(DeviceName))
|
|
|
|
|
|
|
|
// assert crypt device got removed
|
|
|
|
_, err = os.Stat(newPath)
|
|
|
|
assert.True(os.IsNotExist(err))
|
|
|
|
// assert integrity device got removed
|
|
|
|
_, err = os.Stat(newPath + "_dif")
|
|
|
|
assert.True(os.IsNotExist(err))
|
|
|
|
}
|