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  }