github.com/masterhung0112/hk_server/v5@v5.0.0-20220302090640-ec71aef15e1c/app/imaging/encode_test.go (about) 1 // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. 2 // See LICENSE.txt for license information. 3 4 package imaging 5 6 import ( 7 "bytes" 8 "image" 9 "sync" 10 "testing" 11 12 "github.com/stretchr/testify/require" 13 ) 14 15 func TestNewEncoder(t *testing.T) { 16 t.Run("invalid options", func(t *testing.T) { 17 e, err := NewEncoder(EncoderOptions{ 18 ConcurrencyLevel: -1, 19 }) 20 require.Nil(t, e) 21 require.Error(t, err) 22 }) 23 24 t.Run("empty options", func(t *testing.T) { 25 e, err := NewEncoder(EncoderOptions{}) 26 require.NotNil(t, e) 27 require.NoError(t, err) 28 require.Nil(t, e.sem) 29 }) 30 31 t.Run("valid options", func(t *testing.T) { 32 e, err := NewEncoder(EncoderOptions{ 33 ConcurrencyLevel: 4, 34 }) 35 require.NotNil(t, e) 36 require.NoError(t, err) 37 require.NotNil(t, e.sem) 38 require.Equal(t, 4, cap(e.sem)) 39 }) 40 } 41 42 func TestEncoderEncode(t *testing.T) { 43 t.Run("default options", func(t *testing.T) { 44 e, err := NewEncoder(EncoderOptions{}) 45 require.NotNil(t, e) 46 require.NoError(t, err) 47 48 var buf bytes.Buffer 49 rawImg := image.NewRGBA(image.Rect(0, 0, 1280, 1024)) 50 err = e.EncodePNG(&buf, rawImg) 51 require.NoError(t, err) 52 require.NotEmpty(t, buf) 53 54 err = e.EncodeJPEG(&buf, rawImg, 50) 55 require.NoError(t, err) 56 require.NotEmpty(t, buf) 57 }) 58 59 t.Run("concurrency bounded", func(t *testing.T) { 60 e, err := NewEncoder(EncoderOptions{ 61 ConcurrencyLevel: 1, 62 }) 63 require.NotNil(t, e) 64 require.NoError(t, err) 65 66 rawImg := image.NewRGBA(image.Rect(0, 0, 1280, 1024)) 67 68 var wg sync.WaitGroup 69 wg.Add(2) 70 71 go func() { 72 defer wg.Done() 73 var buf bytes.Buffer 74 err := e.EncodePNG(&buf, rawImg) 75 require.NoError(t, err) 76 require.NotEmpty(t, buf) 77 }() 78 79 go func() { 80 defer wg.Done() 81 var buf bytes.Buffer 82 err := e.EncodeJPEG(&buf, rawImg, 50) 83 require.NoError(t, err) 84 require.NotEmpty(t, buf) 85 }() 86 87 wg.Wait() 88 require.Empty(t, e.sem) 89 }) 90 }