go.temporal.io/server@v1.23.0/common/checksum/crc_test.go (about) 1 // The MIT License 2 // 3 // Copyright (c) 2020 Temporal Technologies Inc. All rights reserved. 4 // 5 // Copyright (c) 2020 Uber Technologies, Inc. 6 // 7 // Permission is hereby granted, free of charge, to any person obtaining a copy 8 // of this software and associated documentation files (the "Software"), to deal 9 // in the Software without restriction, including without limitation the rights 10 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 11 // copies of the Software, and to permit persons to whom the Software is 12 // furnished to do so, subject to the following conditions: 13 // 14 // The above copyright notice and this permission notice shall be included in 15 // all copies or substantial portions of the Software. 16 // 17 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 22 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 23 // THE SOFTWARE. 24 25 package checksum 26 27 import ( 28 "sync" 29 "sync/atomic" 30 "testing" 31 "time" 32 33 "github.com/pborman/uuid" 34 "github.com/stretchr/testify/assert" 35 commonpb "go.temporal.io/api/common/v1" 36 workflowpb "go.temporal.io/api/workflow/v1" 37 "google.golang.org/protobuf/types/known/timestamppb" 38 39 "go.temporal.io/server/common" 40 ) 41 42 func TestCRC32OverProto(t *testing.T) { 43 // note: do not use a struct with map since 44 // iteration order is not guaranteed in Go and 45 // so, each call to thrift encode will result in 46 // different set of serialized bytes 47 obj := &workflowpb.WorkflowExecutionInfo{ 48 Execution: &commonpb.WorkflowExecution{ 49 WorkflowId: uuid.New(), 50 RunId: uuid.New(), 51 }, 52 StartTime: timestamppb.New(time.Now().UTC()), 53 HistoryLength: 550, 54 } 55 56 parallism := 10 57 loopCount := 100 58 successCount := int64(0) 59 60 startC := make(chan struct{}) 61 doneWG := sync.WaitGroup{} 62 doneWG.Add(parallism) 63 64 for i := 0; i < parallism; i++ { 65 go func() { 66 defer doneWG.Done() 67 <-startC 68 for count := 0; count < loopCount; count++ { 69 csum, err := GenerateCRC32(obj, 1) 70 if err != nil { 71 return 72 } 73 if err := Verify(obj, csum); err != nil { 74 return 75 } 76 atomic.AddInt64(&successCount, 1) 77 } 78 }() 79 } 80 81 close(startC) 82 success := common.AwaitWaitGroup(&doneWG, time.Second) 83 assert.True(t, success, "timed out waiting for goroutines to finish") 84 assert.Equal(t, int64(parallism*loopCount), successCount) 85 }