started to implements the integration tests

This commit is contained in:
didier.amyot committed 2014-10-18 11:06:37 -04:00
1 parent 0186c30750
commit b52129817e
5 files changed
+110 -37

No files matched your search

+23 -11
View File
@@ -13,10 +13,10 @@ type Payload interface {
GetAlgorithm() string GetAlgorithm() string
GetMode() string GetMode() string
GetHashMethod() string GetHashMethod() string
GetPayloadData() io.Reader GetPayloadData() (io.Reader, error)
} }
type Encryptor interface { type PublicKeyEncryptor interface {
Encrypt(data []byte) ([]byte, error) Encrypt(data []byte) ([]byte, error)
} }
@@ -24,17 +24,25 @@ type Signer interface {
Sign(data []byte) ([]byte, error) Sign(data []byte) ([]byte, error)
} }
func NewEnveloper(publicKeyEncryptor PublicKeyEncryptor, payload Payload, signer Signer) *Enveloper {
return &Enveloper{
publicKeyEncryptor: publicKeyEncryptor,
payload: payload,
signer: signer,
}
}
type Enveloper struct { type Enveloper struct {
encryptor Encryptor publicKeyEncryptor PublicKeyEncryptor
payload Payload payload Payload
signer Signer signer Signer
EncryptedKey []byte EncryptedKey []byte
Signature []byte Signature []byte
Metadata *Metadata Metadata *Metadata
} }
func (this *Enveloper) EncryptKey() ([]byte, error) { func (this *Enveloper) EncryptKey() ([]byte, error) {
return this.encryptor.Encrypt(this.payload.GetKey()) return this.publicKeyEncryptor.Encrypt(this.payload.GetKey())
} }
func (this *Enveloper) SignPayload() ([]byte, error) { func (this *Enveloper) SignPayload() ([]byte, error) {
@@ -66,8 +74,12 @@ func (this *Enveloper) WritePayload(z *zip.Writer) error {
if err != nil { if err != nil {
return err return err
} }
_, err = io.Copy(dataWriter, this.payload.GetPayloadData()) if r, err := this.payload.GetPayloadData(); err != nil {
return err return err
} else if _, err = io.Copy(dataWriter, r); err != nil {
return err
}
return nil
} }
func (this *Enveloper) WriteMetadata(z *zip.Writer) error { func (this *Enveloper) WriteMetadata(z *zip.Writer) error {
+15 -26
View File
@@ -4,15 +4,12 @@ import (
"archive/zip" "archive/zip"
"bytes" "bytes"
"errors" "errors"
"fmt"
"github.com/didiercrunch/filou/helper" "github.com/didiercrunch/filou/helper"
"io" "io"
"reflect" "reflect"
"testing" "testing"
) )
var _ = fmt.Print
type mockPayload struct { type mockPayload struct {
MethodsCall []string MethodsCall []string
} }
@@ -77,13 +74,13 @@ func (this *mockPayload) GetHashMethod() string {
return theHashMethodUsedInThePayLoad return theHashMethodUsedInThePayLoad
} }
func (this *mockPayload) GetPayloadData() io.Reader { func (this *mockPayload) GetPayloadData() (io.Reader, error) {
this.addMethodCall("GetPayloadData") this.addMethodCall("GetPayloadData")
someData := `some data must be here. In reality, the data someData := `some data must be here. In reality, the data
would be the encrypted payload. This will be would be the encrypted payload. This will be
the big chunk of the data. the big chunk of the data.
` `
return bytes.NewReader([]byte(someData)) return bytes.NewReader([]byte(someData)), nil
} }
type mockEncryptor struct{} type mockEncryptor struct{}
@@ -110,8 +107,8 @@ func (this *mockSigner) Sign(data []byte) ([]byte, error) {
func TestEncryptKey(t *testing.T) { func TestEncryptKey(t *testing.T) {
env := &Enveloper{ env := &Enveloper{
encryptor: &mockEncryptor{}, publicKeyEncryptor: &mockEncryptor{},
payload: newMockPayload(), payload: newMockPayload(),
} }
if enc, err := env.EncryptKey(); err != nil { if enc, err := env.EncryptKey(); err != nil {
t.Error(err) t.Error(err)
@@ -121,11 +118,7 @@ func TestEncryptKey(t *testing.T) {
} }
func TestCreateEnvelopCompletelyEncryptKey(t *testing.T) { func TestCreateEnvelopCompletelyEncryptKey(t *testing.T) {
env := &Enveloper{ env := NewEnveloper(&mockEncryptor{}, newMockPayload(), &mockSigner{})
encryptor: &mockEncryptor{},
payload: newMockPayload(),
signer: &mockSigner{},
}
if err := env.CreateEnvelopCompletely(); err != nil { if err := env.CreateEnvelopCompletely(); err != nil {
t.Error(err) t.Error(err)
} }
@@ -147,11 +140,7 @@ func TestSignPayload(t *testing.T) {
} }
func TestCreateEnvelopCompletelySignHash(t *testing.T) { func TestCreateEnvelopCompletelySignHash(t *testing.T) {
env := &Enveloper{ env := NewEnveloper(&mockEncryptor{}, newMockPayload(), &mockSigner{})
payload: newMockPayload(),
encryptor: &mockEncryptor{},
signer: &mockSigner{},
}
if err := env.CreateEnvelopCompletely(); err != nil { if err := env.CreateEnvelopCompletely(); err != nil {
t.Error(err) t.Error(err)
} }
@@ -176,9 +165,9 @@ func TestCreateMetadata(t *testing.T) {
func TestCreateEnvelopCompletelyMetadata(t *testing.T) { func TestCreateEnvelopCompletelyMetadata(t *testing.T) {
env := &Enveloper{ env := &Enveloper{
encryptor: &mockEncryptor{}, publicKeyEncryptor: &mockEncryptor{},
payload: newMockPayload(), payload: newMockPayload(),
signer: &mockSigner{}, signer: &mockSigner{},
} }
if err := env.CreateEnvelopCompletely(); err != nil { if err := env.CreateEnvelopCompletely(); err != nil {
t.Error(err) t.Error(err)
@@ -190,9 +179,9 @@ func TestCreateEnvelopCompletelyMetadata(t *testing.T) {
func TestWriteToWriter(t *testing.T) { func TestWriteToWriter(t *testing.T) {
env := &Enveloper{ env := &Enveloper{
payload: newMockPayload(), payload: newMockPayload(),
signer: &mockSigner{}, signer: &mockSigner{},
encryptor: &mockEncryptor{}, publicKeyEncryptor: &mockEncryptor{},
} }
w := helper.NewMockIoWriter() w := helper.NewMockIoWriter()
if err := env.WriteToWriter(w); err != nil { if err := env.WriteToWriter(w); err != nil {
@@ -211,9 +200,9 @@ func TestWriteToWriter(t *testing.T) {
func TestMethodOrder(t *testing.T) { func TestMethodOrder(t *testing.T) {
mockPayload := newMockPayload() mockPayload := newMockPayload()
env := &Enveloper{ env := &Enveloper{
payload: mockPayload, payload: mockPayload,
signer: &mockSigner{}, signer: &mockSigner{},
encryptor: &mockEncryptor{}, publicKeyEncryptor: &mockEncryptor{},
} }
w := helper.NewMockIoWriter() w := helper.NewMockIoWriter()
if err := env.WriteToWriter(w); err != nil { if err := env.WriteToWriter(w); err != nil {
+39
View File
@@ -0,0 +1,39 @@
package integration
import (
"bytes"
"testing"
"github.com/didiercrunch/filou/envelop"
"github.com/didiercrunch/filou/payload"
)
type mockEncryptor struct{}
func (this *mockEncryptor) Encrypt(data []byte) ([]byte, error) {
// cesar encryption!
ret := make([]byte, len(data))
for i, d := range data {
ret[i] = d + 3 // modulo is implicit
}
return ret, nil
}
type mockSigner struct{}
func (this *mockSigner) Sign(data []byte) ([]byte, error) {
// a slice with the sum of the data plus a "secret" value
var sum byte = 36
for _, d := range data {
sum += d
}
return []byte{sum}, nil
}
func TestPayloadCanBeUseInEnvelop(t *testing.T) {
payload_ := payload.GetDefaultPayload(bytes.NewBufferString("some data to encrypt"))
envelop := envelop.NewEnveloper(&mockEncryptor{}, payload_, &mockSigner{})
if envelop == nil {
t.Fail()
}
}
+11
View File
@@ -3,6 +3,7 @@ package payload
import ( import (
"archive/zip" "archive/zip"
"crypto/cipher" "crypto/cipher"
"crypto/rand"
"encoding/json" "encoding/json"
"io" "io"
) )
@@ -21,6 +22,16 @@ type Payload struct {
Hash []byte Hash []byte
} }
func GetDefaultPayload(dataSource io.Reader) *Payload {
return &Payload{
DataSource: dataSource,
Random: rand.Reader,
HashMethod: SHA512,
Block: AES256,
BlockMode: OFB,
}
}
type payloadWriter struct { type payloadWriter struct {
Reader io.Reader Reader io.Reader
Pipewriter io.WriteCloser Pipewriter io.WriteCloser
+22
View File
@@ -141,5 +141,27 @@ func TestGetPayloadData(t *testing.T) {
fmt.Println(p.GetHash()) fmt.Println(p.GetHash())
errorC <- errors.New("hash has not been computed") errorC <- errors.New("hash has not been computed")
} }
}
func TestGetDefaultPayload(t *testing.T) {
p := GetDefaultPayload(bytes.NewBufferString("some data to encrypt"))
r, err := p.GetPayloadData()
if err != nil {
t.Error(err)
return
}
errorC := make(chan error)
go func(errorC chan error) {
if _, err := ioutil.ReadAll(r); err != nil {
errorC <- err
}
errorC <- nil
}(errorC)
if err := <-errorC; err != nil {
t.Error(err)
} else if len(p.GetHash()) != 512/8 {
fmt.Println(p.GetHash())
errorC <- errors.New("hash has not been computed")
}
} }