Compare commits
2 Commits
main
...
compress_d
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
165e407121 | ||
|
|
51e536d31a |
@ -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))
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user