platformtests: fix skipping encryption-only tests on systems that don't support encryption

(Or split the test into two tests  of which one is skipped depending on encryption support)
This commit is contained in:
Christian Schwarz 2020-09-05 16:04:34 +02:00
parent b1f8cdf385
commit 0c189265e8
3 changed files with 28 additions and 12 deletions

View File

@ -29,7 +29,8 @@ var Cases = []Case{BatchDestroy,
ReplicationStepCompletedLostBehavior__GuaranteeResumability, ReplicationStepCompletedLostBehavior__GuaranteeResumability,
ResumableRecvAndTokenHandling, ResumableRecvAndTokenHandling,
ResumeTokenParsing, ResumeTokenParsing,
SendArgsValidationEncryptedSendOfUnencryptedDatasetForbidden, SendArgsValidationEncryptedSendOfUnencryptedDatasetForbidden__EncryptionSupported_false,
SendArgsValidationEncryptedSendOfUnencryptedDatasetForbidden__EncryptionSupported_true,
SendArgsValidationResumeTokenDifferentFilesystemForbidden, SendArgsValidationResumeTokenDifferentFilesystemForbidden,
SendArgsValidationResumeTokenEncryptionMismatchForbidden, SendArgsValidationResumeTokenEncryptionMismatchForbidden,
UndestroyableSnapshotParsing, UndestroyableSnapshotParsing,

View File

@ -10,6 +10,14 @@ import (
) )
func ReceiveForceIntoEncryptedErr(ctx *platformtest.Context) { func ReceiveForceIntoEncryptedErr(ctx *platformtest.Context) {
supported, err := zfs.EncryptionCLISupported(ctx)
require.NoError(ctx, err, "encryption feature test failed")
if !supported {
ctx.SkipNow()
return
}
platformtest.Run(ctx, platformtest.PanicErr, ctx.RootDataset, ` platformtest.Run(ctx, platformtest.PanicErr, ctx.RootDataset, `
DESTROYROOT DESTROYROOT
CREATEROOT CREATEROOT

View File

@ -9,11 +9,22 @@ import (
"github.com/zrepl/zrepl/zfs" "github.com/zrepl/zrepl/zfs"
) )
func SendArgsValidationEncryptedSendOfUnencryptedDatasetForbidden(ctx *platformtest.Context) { func SendArgsValidationEncryptedSendOfUnencryptedDatasetForbidden__EncryptionSupported_true(ctx *platformtest.Context) {
sendArgsValidationEncryptedSendOfUnencryptedDatasetForbidden_impl(ctx, true)
}
func SendArgsValidationEncryptedSendOfUnencryptedDatasetForbidden__EncryptionSupported_false(ctx *platformtest.Context) {
sendArgsValidationEncryptedSendOfUnencryptedDatasetForbidden_impl(ctx, false)
}
func sendArgsValidationEncryptedSendOfUnencryptedDatasetForbidden_impl(ctx *platformtest.Context, testForEncryptionSupported bool) {
supported, err := zfs.EncryptionCLISupported(ctx) supported, err := zfs.EncryptionCLISupported(ctx)
check(err) check(err)
expectNotSupportedErr := !supported if supported != testForEncryptionSupported {
ctx.SkipNow()
}
noEncryptionCLISupport := !supported
platformtest.Run(ctx, platformtest.PanicErr, ctx.RootDataset, ` platformtest.Run(ctx, platformtest.PanicErr, ctx.RootDataset, `
DESTROYROOT DESTROYROOT
@ -44,9 +55,11 @@ func SendArgsValidationEncryptedSendOfUnencryptedDatasetForbidden(ctx *platformt
// fallthrough // fallthrough
} }
if expectNotSupportedErr { if noEncryptionCLISupport {
require.Error(ctx, err) require.Error(ctx, err)
require.Equal(ctx, zfs.ErrEncryptedSendNotSupported, err) saverr, ok := err.(*zfs.ZFSSendArgsValidationError)
require.True(ctx, ok, "%T", err)
require.Equal(ctx, zfs.ZFSSendArgsEncryptedSendRequestedButFSUnencrypted, saverr.What)
return return
} }
require.Error(ctx, err) require.Error(ctx, err)
@ -138,13 +151,7 @@ func SendArgsValidationResumeTokenEncryptionMismatchForbidden(ctx *platformtest.
} }
func SendArgsValidationResumeTokenDifferentFilesystemForbidden(ctx *platformtest.Context) { func SendArgsValidationResumeTokenDifferentFilesystemForbidden(ctx *platformtest.Context) {
supported, err := zfs.ResumeSendSupported(ctx)
supported, err := zfs.EncryptionCLISupported(ctx)
check(err)
if !supported {
ctx.SkipNow()
}
supported, err = zfs.ResumeSendSupported(ctx)
check(err) check(err)
if !supported { if !supported {
ctx.SkipNow() ctx.SkipNow()