From 70ccdd078e71b36178acf87a88b6ebadf4011266 Mon Sep 17 00:00:00 2001 From: "Joe Richey joerichey@google.com" Date: Tue, 23 May 2017 18:59:39 -0700 Subject: actions: creating and unlocking protectors This commit adds in the Protector struct to the actions package. This struct represents an unlocked Protector. They can be created from a context or they can be unlocked using some provided data. In either case, the data is provided via a callback mechanism. Change-Id: I066e965b8e8e0feeba61d9c0e4472dd08965cafb --- actions/protector_test.go | 74 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 actions/protector_test.go (limited to 'actions/protector_test.go') diff --git a/actions/protector_test.go b/actions/protector_test.go new file mode 100644 index 0000000..bb59dba --- /dev/null +++ b/actions/protector_test.go @@ -0,0 +1,74 @@ +/* + * protector_test.go - tests for creating protectors + * + * Copyright 2017 Google Inc. + * Author: Joe Richey (joerichey@google.com) + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +package actions + +import ( + "bytes" + "errors" + "testing" + + . "fscrypt/crypto" +) + +const testProtectorName = "my favorite protector" +const testProtectorName2 = testProtectorName + "2" + +var errCallback = errors.New("bad callback") + +func goodCallback(data ProtectorData) (*Key, error) { + return NewFixedLengthKeyFromReader(bytes.NewReader(timingPassphrase), len(timingPassphrase)) +} + +func badCallback(data ProtectorData) (*Key, error) { + return nil, errCallback +} + +// Tests that we can create a valid protector. +func TestNewProtector(t *testing.T) { + ctx, err := makeContext() + defer cleaupContext() + if err != nil { + t.Fatal(err) + } + + p, err := ctx.NewProtector(testProtectorName, goodCallback) + if err != nil { + t.Error(err) + } else { + p.Wipe() + } +} + +// Tests that a failure in the callback is relayed back to the caller. +func TestBadCallback(t *testing.T) { + ctx, err := makeContext() + defer cleaupContext() + if err != nil { + t.Fatal(err) + } + + p, err := ctx.NewProtector(testProtectorName, badCallback) + if err == nil { + p.Wipe() + } + if err != errCallback { + t.Error("callback error was not relayed back to caller") + } +} -- cgit v1.2.3