Remove long running randomised test
This commit is contained in:
parent
c3ae0e98fe
commit
5a2757e785
|
@ -1,14 +1,10 @@
|
||||||
package encryption
|
package encryption
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"crypto/ecdsa"
|
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"math/rand"
|
|
||||||
"os"
|
"os"
|
||||||
"reflect"
|
|
||||||
"sync"
|
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
@ -743,126 +739,6 @@ func (s *EncryptionServiceTestSuite) TestConcurrentBundles() {
|
||||||
s.Require().NoError(err)
|
s.Require().NoError(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
func publish(
|
|
||||||
e *Protocol,
|
|
||||||
privateKey *ecdsa.PrivateKey,
|
|
||||||
publicKey *ecdsa.PublicKey,
|
|
||||||
errChan chan error,
|
|
||||||
output chan *ProtocolMessage,
|
|
||||||
) {
|
|
||||||
var wg sync.WaitGroup
|
|
||||||
|
|
||||||
for i := 0; i < 200; i++ {
|
|
||||||
|
|
||||||
// Simulate 5% of the messages dropped
|
|
||||||
if rand.Intn(100) <= 95 { // nolint: gosec
|
|
||||||
wg.Add(1)
|
|
||||||
// Simulate out of order messages
|
|
||||||
go func() {
|
|
||||||
defer wg.Done()
|
|
||||||
time.Sleep(time.Duration(rand.Intn(50)) * time.Millisecond) // nolint: gosec
|
|
||||||
response, err := e.BuildEncryptedMessage(privateKey, publicKey, cleartext)
|
|
||||||
if err != nil {
|
|
||||||
errChan <- err
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
output <- response.Message
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
wg.Wait()
|
|
||||||
close(output)
|
|
||||||
close(errChan)
|
|
||||||
}
|
|
||||||
|
|
||||||
func receiver(
|
|
||||||
s *Protocol,
|
|
||||||
privateKey *ecdsa.PrivateKey,
|
|
||||||
publicKey *ecdsa.PublicKey,
|
|
||||||
errChan chan error,
|
|
||||||
input chan *ProtocolMessage,
|
|
||||||
) {
|
|
||||||
i := 0
|
|
||||||
|
|
||||||
for payload := range input {
|
|
||||||
actualCleartext, err := s.HandleMessage(privateKey, publicKey, payload, defaultMessageID)
|
|
||||||
if err != nil {
|
|
||||||
errChan <- err
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if !reflect.DeepEqual(actualCleartext.DecryptedMessage, cleartext) {
|
|
||||||
errChan <- errors.New("Decrypted value does not match")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
i++
|
|
||||||
}
|
|
||||||
close(errChan)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *EncryptionServiceTestSuite) TestRandomised() {
|
|
||||||
|
|
||||||
seed := time.Now().UTC().UnixNano()
|
|
||||||
rand.Seed(seed)
|
|
||||||
|
|
||||||
// Print so that if it fails it can be replicated
|
|
||||||
fmt.Printf("Starting test with seed: %x\n", seed)
|
|
||||||
|
|
||||||
bobKey, err := crypto.GenerateKey()
|
|
||||||
s.Require().NoError(err)
|
|
||||||
|
|
||||||
aliceKey, err := crypto.GenerateKey()
|
|
||||||
s.Require().NoError(err)
|
|
||||||
|
|
||||||
// Create a bundle
|
|
||||||
bobBundle, err := s.bob.GetBundle(bobKey)
|
|
||||||
s.Require().NoError(err)
|
|
||||||
|
|
||||||
// We add bob bundle
|
|
||||||
_, err = s.alice.ProcessPublicBundle(aliceKey, bobBundle)
|
|
||||||
s.Require().NoError(err)
|
|
||||||
|
|
||||||
// Create a bundle
|
|
||||||
aliceBundle, err := s.alice.GetBundle(aliceKey)
|
|
||||||
s.Require().NoError(err)
|
|
||||||
|
|
||||||
// We add alice bundle
|
|
||||||
_, err = s.bob.ProcessPublicBundle(bobKey, aliceBundle)
|
|
||||||
s.Require().NoError(err)
|
|
||||||
|
|
||||||
aliceChan := make(chan *ProtocolMessage, 100)
|
|
||||||
bobChan := make(chan *ProtocolMessage, 100)
|
|
||||||
|
|
||||||
alicePublisherErrChan := make(chan error, 1)
|
|
||||||
bobPublisherErrChan := make(chan error, 1)
|
|
||||||
|
|
||||||
aliceReceiverErrChan := make(chan error, 1)
|
|
||||||
bobReceiverErrChan := make(chan error, 1)
|
|
||||||
|
|
||||||
// Set up alice publishe
|
|
||||||
go publish(s.alice, aliceKey, &bobKey.PublicKey, alicePublisherErrChan, bobChan)
|
|
||||||
// Set up bob publisher
|
|
||||||
go publish(s.bob, bobKey, &aliceKey.PublicKey, bobPublisherErrChan, aliceChan)
|
|
||||||
|
|
||||||
// Set up bob receiver
|
|
||||||
go receiver(s.bob, bobKey, &aliceKey.PublicKey, bobReceiverErrChan, bobChan)
|
|
||||||
|
|
||||||
// Set up alice receiver
|
|
||||||
go receiver(s.alice, aliceKey, &bobKey.PublicKey, aliceReceiverErrChan, aliceChan)
|
|
||||||
|
|
||||||
aliceErr := <-alicePublisherErrChan
|
|
||||||
s.Require().NoError(aliceErr)
|
|
||||||
|
|
||||||
bobErr := <-bobPublisherErrChan
|
|
||||||
s.Require().NoError(bobErr)
|
|
||||||
|
|
||||||
aliceErr = <-aliceReceiverErrChan
|
|
||||||
s.Require().NoError(aliceErr)
|
|
||||||
|
|
||||||
bobErr = <-bobReceiverErrChan
|
|
||||||
s.Require().NoError(bobErr)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Edge cases
|
// Edge cases
|
||||||
|
|
||||||
// The bundle is lost
|
// The bundle is lost
|
||||||
|
|
Loading…
Reference in New Issue