@@ -2,6 +2,7 @@ package ppmerge
22
33import (
44 "bytes"
5+ "io"
56 "os"
67 "testing"
78
@@ -119,20 +120,73 @@ func TestMergeWrite(t *testing.T) {
119120}
120121
121122func TestMergeUnpack (t * testing.T ) {
122- profiles := getProfiles (t , "hprof1" , "hprof2" , "hprof3" , "hprof4" )
123+ t .Run ("general merge unpack" , func (t * testing.T ) {
124+ profiles := getProfiles (t , "hprof1" , "hprof2" , "hprof3" , "hprof4" )
123125
124- profileMerger := NewProfileMerger ()
125- mergedProfile := profileMerger .Merge (profiles ... )
126- require .NotNil (t , mergedProfile )
126+ profileMerger := NewProfileMerger ()
127+ mergedProfile := profileMerger .Merge (profiles ... )
128+ require .NotNil (t , mergedProfile )
127129
128- compressedBB := bytes .NewBuffer (nil )
129- require .NoError (t , profileMerger .WriteCompressed (compressedBB ))
130- require .Greater (t , compressedBB .Len (), 0 )
130+ compressedBB := bytes .NewBuffer (nil )
131+ require .NoError (t , profileMerger .WriteCompressed (compressedBB ))
132+ require .Greater (t , compressedBB .Len (), 0 )
133+
134+ unpacker := NewProfileUnPacker (nil )
135+ p , err := unpacker .UnpackRaw (compressedBB .Bytes (), 0 )
136+ require .NoError (t , err )
137+ require .NotNil (t , p )
138+ })
139+
140+ t .Run ("merge unpack debug goroutine profiles" , func (t * testing.T ) {
141+ profiles := getDebugProfiles (t , "parca_goroutine_debug_1_1" , "parca_goroutine_debug_1_2" , "parca_goroutine_debug_1_2" )
142+
143+ profileMerger := NewByteProfileMerger ()
144+ mergedProfile := profileMerger .Merge (profiles ... )
145+ require .NotNil (t , mergedProfile )
146+
147+ unpacker := NewByteProfileUnPacker (mergedProfile )
148+ p , err := unpacker .Unpack (0 )
149+ require .NoError (t , err )
150+ require .NotNil (t , p )
151+ require .Equal (t , profiles [0 ], p )
152+
153+ p , err = unpacker .Unpack (1 )
154+ require .NoError (t , err )
155+ require .NotNil (t , p )
156+ require .Equal (t , profiles [1 ], p )
157+
158+ p , err = unpacker .Unpack (2 )
159+ require .NoError (t , err )
160+ require .NotNil (t , p )
161+ require .Equal (t , profiles [2 ], p )
162+ })
131163
132- unpacker := NewProfileUnPacker (nil )
133- p , err := unpacker .UnpackRaw (compressedBB .Bytes (), 0 )
134- require .NoError (t , err )
135- require .NotNil (t , p )
164+ t .Run ("merge unpack raw debug goroutine profiles" , func (t * testing.T ) {
165+ profiles := getDebugProfiles (t , "parca_goroutine_debug_1_1" , "parca_goroutine_debug_1_2" , "parca_goroutine_debug_1_2" )
166+
167+ profileMerger := NewByteProfileMerger ()
168+ mergedProfile := profileMerger .Merge (profiles ... )
169+ require .NotNil (t , mergedProfile )
170+
171+ bb := bytes .NewBuffer (nil )
172+ require .NoError (t , profileMerger .WriteCompressed (bb ))
173+
174+ unpacker := NewByteProfileUnPacker (mergedProfile )
175+ p , err := unpacker .UnpackRaw (bb .Bytes (), 0 )
176+ require .NoError (t , err )
177+ require .NotNil (t , p )
178+ require .Equal (t , profiles [0 ], p )
179+
180+ p , err = unpacker .UnpackRaw (bb .Bytes (), 1 )
181+ require .NoError (t , err )
182+ require .NotNil (t , p )
183+ require .Equal (t , profiles [1 ], p )
184+
185+ p , err = unpacker .UnpackRaw (bb .Bytes (), 2 )
186+ require .NoError (t , err )
187+ require .NotNil (t , p )
188+ require .Equal (t , profiles [2 ], p )
189+ })
136190}
137191
138192func BenchmarkProfileMerger (b * testing.B ) {
@@ -173,3 +227,17 @@ func getProfiles(t require.TestingT, paths ...string) []*profile.Profile {
173227
174228 return profiles
175229}
230+
231+ func getDebugProfiles (t require.TestingT , paths ... string ) [][]byte {
232+ dir := "./testdata/"
233+ profiles := make ([][]byte , len (paths ))
234+ for i , profileName := range paths {
235+ file , err := os .OpenFile (dir + profileName , os .O_RDONLY , 0666 )
236+ require .NoError (t , err )
237+ p , err := io .ReadAll (file )
238+ require .NoError (t , err )
239+ profiles [i ] = p
240+ }
241+
242+ return profiles
243+ }
0 commit comments