Compare commits

...

2 Commits

Author SHA1 Message Date
Abhishek Pandey
165e407121 Add ztsd 2023-12-05 16:35:41 -08:00
Abhishek Pandey
51e536d31a Test compressed size 2023-12-05 16:17:36 -08:00

View File

@ -1,6 +1,8 @@
package drive package drive
import ( import (
"bytes"
"compress/gzip"
"errors" "errors"
"fmt" "fmt"
"io" "io"
@ -11,6 +13,7 @@ import (
"time" "time"
"github.com/alcionai/clues" "github.com/alcionai/clues"
"github.com/klauspost/compress/zstd"
"github.com/microsoftgraph/msgraph-sdk-go/models" "github.com/microsoftgraph/msgraph-sdk-go/models"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
@ -41,6 +44,91 @@ type URLCacheIntegrationSuite struct {
driveID string driveID string
} }
func CompressWithGZIP(input []byte) (bytes.Buffer, error) {
var encoder *gzip.Writer
var err error
var tmpBuffer bytes.Buffer
encoder, err = gzip.NewWriterLevel(
&tmpBuffer,
gzip.BestCompression)
if err != nil {
return tmpBuffer, err
}
_, err = encoder.Write(input)
if err != nil {
return tmpBuffer, err
}
if err := encoder.Close(); err != nil {
return tmpBuffer, err
}
return tmpBuffer, nil
}
func DecompressWithGZIP(compressedData []byte) ([]byte, error) {
reader, err := gzip.NewReader(bytes.NewBuffer(compressedData))
if err != nil {
return nil, err
}
defer reader.Close()
decompressedData, err := io.ReadAll(reader)
if err != nil {
return nil, err
}
return decompressedData, nil
}
func CompressWithZstd(input []byte) (bytes.Buffer, error) {
var tmpBuffer bytes.Buffer
var encoder, err = zstd.NewWriter(&tmpBuffer, zstd.WithEncoderLevel(zstd.SpeedBestCompression))
if err != nil {
return tmpBuffer, err
}
defer encoder.Close()
_, err = encoder.Write(input)
if err != nil {
return tmpBuffer, err
}
err = encoder.Close()
if err != nil {
return tmpBuffer, err
}
return tmpBuffer, nil
}
func DecompressWithZstd(compressedData []byte) ([]byte, error) {
decoder, err := zstd.NewReader(bytes.NewReader(compressedData))
if err != nil {
return nil, err
}
defer decoder.Close()
decompressedData, err := io.ReadAll(decoder)
if err != nil {
return nil, err
}
return decompressedData, nil
// var decompressedBuffer bytes.Buffer
// _, err = decoder.WriteTo(&decompressedBuffer)
// if err != nil {
// return nil, err
// }
// return decompressedBuffer.Bytes(), nil
}
func TestURLCacheIntegrationSuite(t *testing.T) { func TestURLCacheIntegrationSuite(t *testing.T) {
suite.Run(t, &URLCacheIntegrationSuite{ suite.Run(t, &URLCacheIntegrationSuite{
Suite: tester.NewIntegrationSuite( Suite: tester.NewIntegrationSuite(
@ -170,13 +258,29 @@ func (suite *URLCacheIntegrationSuite) TestURLCacheBasic() {
require.NotEmpty(t, props.downloadURL) require.NotEmpty(t, props.downloadURL)
require.Equal(t, false, props.isDeleted) require.Equal(t, false, props.isDeleted)
compressed, err := CompressWithGZIP([]byte(props.downloadURL))
require.NoError(t, err, clues.ToCore(err))
newDownloadUrl := compressed.String()
ztsdCompressed, err := CompressWithZstd([]byte(props.downloadURL))
require.NoError(t, err, clues.ToCore(err))
ztsdDownloadUrl := ztsdCompressed.String()
fmt.Printf("download url size, orig %d compressed gzip %d ztsd %d \n", len(props.downloadURL), len(newDownloadUrl), len(ztsdDownloadUrl))
// Validate download URL // Validate download URL
// Decompress url
decompressed, err := DecompressWithGZIP([]byte(newDownloadUrl))
require.NoError(t, err, clues.ToCore(err))
c := graph.NewNoTimeoutHTTPWrapper(count.New()) c := graph.NewNoTimeoutHTTPWrapper(count.New())
resp, err := c.Request( resp, err := c.Request(
ctx, ctx,
http.MethodGet, http.MethodGet,
props.downloadURL, string(decompressed),
nil, nil,
nil) nil)
require.NoError(t, err, clues.ToCore(err)) require.NoError(t, err, clues.ToCore(err))