storj.io/minio@v0.0.0-20230509071714-0cbc90f649b1/cmd/gateway/s3/gateway-s3-metadata_test.go (about)

     1  /*
     2   * MinIO Cloud Storage, (C) 2018 MinIO, Inc.
     3   *
     4   * Licensed under the Apache License, Version 2.0 (the "License");
     5   * you may not use this file except in compliance with the License.
     6   * You may obtain a copy of the License at
     7   *
     8   *     http://www.apache.org/licenses/LICENSE-2.0
     9   *
    10   * Unless required by applicable law or agreed to in writing, software
    11   * distributed under the License is distributed on an "AS IS" BASIS,
    12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13   * See the License for the specific language governing permissions and
    14   * limitations under the License.
    15   */
    16  
    17  package s3
    18  
    19  import (
    20  	"bytes"
    21  	"testing"
    22  
    23  	minio "storj.io/minio/cmd"
    24  )
    25  
    26  // Tests for GW metadata format validity.
    27  func TestGWMetaFormatValid(t *testing.T) {
    28  	tests := []struct {
    29  		name    int
    30  		version string
    31  		format  string
    32  		want    bool
    33  	}{
    34  		{1, "123", "fs", false},
    35  		{2, "123", gwMetaFormat, false},
    36  		{3, gwMetaVersion, "test", false},
    37  		{4, gwMetaVersion100, "hello", false},
    38  		{5, gwMetaVersion, gwMetaFormat, true},
    39  		{6, gwMetaVersion100, gwMetaFormat, true},
    40  	}
    41  	for _, tt := range tests {
    42  		m := newGWMetaV1()
    43  		m.Version = tt.version
    44  		m.Format = tt.format
    45  		if got := m.IsValid(); got != tt.want {
    46  			t.Errorf("Test %d: Expected %v but received %v", tt.name, got, tt.want)
    47  		}
    48  	}
    49  }
    50  
    51  // Tests for reading GW metadata info.
    52  func TestReadGWMetadata(t *testing.T) {
    53  	tests := []struct {
    54  		metaStr string
    55  		pass    bool
    56  	}{
    57  		{`{"version": "` + gwMetaVersion + `", "format":"` + gwMetaFormat + `", "stat": {"size": 132, "modTime": "2018-08-31T22:25:39.23626461Z" }}`, true},
    58  		{`{"version": "` + gwMetaVersion + `", "format":"` + gwMetaFormat + `", "stat": {"size": 132, "modTime": "0000-00-00T00:00:00.00000000Z" }}`, false},
    59  		{`{"version": "` + gwMetaVersion + `", "format":"` + gwMetaFormat + `", "stat": {"size": 5242880, "modTime": "2018-08-31T22:25:39.23626461Z" },"meta":{"content-type":"application/octet-stream","etag":"57c743902b2fc8eea6ba3bb4fc58c8e8"},"parts":[{"number":1,"name":"part.1","etag":"","size":5242880}]}`, true},
    60  		{`{"version": "` + gwMetaVersion + `", "format":"` + gwMetaFormat + `", "stat": {"size": 68190720, "modTime": "2018-08-31T22:25:39.23626461Z" },"meta":{"X-Minio-Internal-Encrypted-Multipart":"","X-Minio-Internal-Server-Side-Encryption-Iv":"kdbOcKdXD3Sew8tOiHe5eI9xkX1oQ2W9JURz0oslCZA=","X-Minio-Internal-Server-Side-Encryption-Seal-Algorithm":"DAREv2-HMAC-SHA256","X-Minio-Internal-Server-Side-Encryption-Sealed-Key":"IAAfAMfqKrxMXC9LuiI7ENP+p0xArepzAiIeB/MftFp7Xmq2OzDkKlmNbj5RKI89RrjiAbOVLSSEMvqQsrIrTQ==","content-type":"text/plain; charset=utf-8","etag":"2b137fa4ab80126af54623b010c98de6-2"},"parts":[{"number":1,"name":"part.1","etag":"c5cac075eefdab801a5198812f51b36e","size":67141632},{"number":2,"name":"part.2","etag":"ccdf4b774bc3be8eef9a8987309e8171","size":1049088}]}`, true},
    61  		{`{"version": "` + gwMetaVersion + `", "format":"` + gwMetaFormat + `", "stat": {"size": "68190720", "modTime": "2018-08-31T22:25:39.23626461Z" },"meta":{"X-Minio-Internal-Encrypted-Multipart":"","X-Minio-Internal-Server-Side-Encryption-Iv":"kdbOcKdXD3Sew8tOiHe5eI9xkX1oQ2W9JURz0oslCZA=","X-Minio-Internal-Server-Side-Encryption-Seal-Algorithm":"DAREv2-HMAC-SHA256","X-Minio-Internal-Server-Side-Encryption-Sealed-Key":"IAAfAMfqKrxMXC9LuiI7ENP+p0xArepzAiIeB/MftFp7Xmq2OzDkKlmNbj5RKI89RrjiAbOVLSSEMvqQsrIrTQ==","content-type":"text/plain; charset=utf-8","etag":"2b137fa4ab80126af54623b010c98de6-2"},"parts":"123"}`, false},
    62  	}
    63  
    64  	for i, tt := range tests {
    65  		buf := bytes.NewBufferString(tt.metaStr)
    66  		m, err := readGWMetadata(minio.GlobalContext, *buf)
    67  		if err != nil && tt.pass {
    68  			t.Errorf("Test %d: Expected parse gw metadata to succeed, but failed, %s", i+1, err)
    69  		}
    70  		if err == nil && !tt.pass {
    71  			t.Errorf("Test %d: Expected parse gw metadata to succeed, but failed", i+1)
    72  		}
    73  		if err == nil {
    74  			if m.Version != gwMetaVersion {
    75  				t.Errorf("Test %d: Expected version %s, but failed with %s", i+1, gwMetaVersion, m.Version)
    76  			}
    77  		}
    78  	}
    79  }