github.com/10XDev/rclone@v1.52.3-0.20200626220027-16af9ab76b2a/backend/jottacloud/jottacloud_internal_test.go (about)

     1  package jottacloud
     2  
     3  import (
     4  	"crypto/md5"
     5  	"fmt"
     6  	"io"
     7  	"testing"
     8  
     9  	"github.com/rclone/rclone/lib/readers"
    10  	"github.com/stretchr/testify/assert"
    11  	"github.com/stretchr/testify/require"
    12  )
    13  
    14  func TestReadMD5(t *testing.T) {
    15  	// Check readMD5 for different size and threshold
    16  	for _, size := range []int64{0, 1024, 10 * 1024, 100 * 1024} {
    17  		t.Run(fmt.Sprintf("%d", size), func(t *testing.T) {
    18  			hasher := md5.New()
    19  			n, err := io.Copy(hasher, readers.NewPatternReader(size))
    20  			require.NoError(t, err)
    21  			assert.Equal(t, n, size)
    22  			wantMD5 := fmt.Sprintf("%x", hasher.Sum(nil))
    23  			for _, threshold := range []int64{512, 1024, 10 * 1024, 20 * 1024} {
    24  				t.Run(fmt.Sprintf("%d", threshold), func(t *testing.T) {
    25  					in := readers.NewPatternReader(size)
    26  					gotMD5, out, cleanup, err := readMD5(in, size, threshold)
    27  					defer cleanup()
    28  					require.NoError(t, err)
    29  					assert.Equal(t, wantMD5, gotMD5)
    30  
    31  					// check md5hash of out
    32  					hasher := md5.New()
    33  					n, err := io.Copy(hasher, out)
    34  					require.NoError(t, err)
    35  					assert.Equal(t, n, size)
    36  					outMD5 := fmt.Sprintf("%x", hasher.Sum(nil))
    37  					assert.Equal(t, wantMD5, outMD5)
    38  				})
    39  			}
    40  		})
    41  	}
    42  }