1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
|
package tpm
import (
"context"
"errors"
"io"
"testing"
"github.com/stretchr/testify/require"
"go.step.sm/crypto/tpm/storage"
)
type closeSimulator struct {
closeErr error
}
func (s *closeSimulator) Open() error {
return nil
}
func (s *closeSimulator) Close() error {
return s.closeErr
}
func (s *closeSimulator) Read([]byte) (int, error) {
return -1, nil
}
func (s *closeSimulator) Write([]byte) (int, error) {
return -1, nil
}
func (s *closeSimulator) MeasurementLog() ([]byte, error) {
return nil, nil
}
var _ io.ReadWriteCloser = (*closeSimulator)(nil)
func newOpenedTPM(t *testing.T) *TPM {
t.Helper()
tpm, err := New(WithSimulator(&closeSimulator{}))
require.NoError(t, err)
err = tpm.open(context.Background())
require.NoError(t, err)
return tpm
}
func newCloseErrorTPM(t *testing.T) *TPM {
t.Helper()
tpm, err := New(WithSimulator(&closeSimulator{
closeErr: errors.New("closeErr"),
}))
require.NoError(t, err)
err = tpm.open(context.Background())
require.NoError(t, err)
tpm.simulator = nil // required to skip returning when similator is configured
return tpm
}
func Test_close(t *testing.T) {
var emptyErr error
anErr := errors.New("anErr")
var closeErr error
tpm := newOpenedTPM(t)
closeTPM(context.Background(), tpm, &emptyErr)
require.NoError(t, emptyErr)
tpm = newOpenedTPM(t)
closeTPM(context.Background(), tpm, &anErr)
require.EqualError(t, anErr, "anErr")
tpm = newCloseErrorTPM(t)
require.Nil(t, tpm.simulator)
closeTPM(context.Background(), newCloseErrorTPM(t), &closeErr)
require.EqualError(t, closeErr, "failed closing attest.TPM: closeErr") // attest.TPM is backed by the closeSimulator
}
func TestTPMNoStorageConfiguredError(t *testing.T) {
err := ErrNoStorageConfigured
require.ErrorIs(t, err, storage.ErrNoStorageConfigured)
}
|