diff options
| author | Joe Richey joerichey@google.com <joerichey@google.com> | 2017-05-23 18:59:39 -0700 |
|---|---|---|
| committer | Joe Richey joerichey@google.com <joerichey@google.com> | 2017-05-31 12:45:50 -0700 |
| commit | 70ccdd078e71b36178acf87a88b6ebadf4011266 (patch) | |
| tree | e38f8afc95fecfc5b5e56fdd41b379e9f0651f3e /actions/protector_test.go | |
| parent | a14724d335a87c3f7a12f7f0837cfc01ec995b82 (diff) | |
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
Diffstat (limited to 'actions/protector_test.go')
| -rw-r--r-- | actions/protector_test.go | 74 |
1 files changed, 74 insertions, 0 deletions
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") + } +} |