From 468ca4ccdac0b2035f65f354e69423a73f4754f3 Mon Sep 17 00:00:00 2001 From: Krishna Srinivas Date: Mon, 20 Jun 2016 20:05:41 +0530 Subject: [PATCH] XL/Unittest: Add testcase for xlMetaV1{} and its methods. (#1938) fixes #1822 --- xl-v1-metadata_test.go | 86 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 xl-v1-metadata_test.go diff --git a/xl-v1-metadata_test.go b/xl-v1-metadata_test.go new file mode 100644 index 000000000..7f19934d4 --- /dev/null +++ b/xl-v1-metadata_test.go @@ -0,0 +1,86 @@ +/* + * Minio Cloud Storage, (C) 2015, 2016 Minio, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package main + +import ( + "testing" +) + +// Test cases for xlMetaV1{} +func TestXLMetaV1(t *testing.T) { + fiveMB := int64(5 * 1024 * 1024) + + testCases := []struct { + partNum int + partName string + etag string + size int64 + index int + }{ + {5, "object5", "etag5", fiveMB + 5, 3}, + {4, "object4", "etag4", fiveMB + 4, 2}, + {7, "object7", "etag7", fiveMB + 7, 4}, + {2, "object2", "etag2", fiveMB + 2, 1}, + {1, "object1", "etag1", fiveMB + 1, 0}, + } + + // Create a XLMetaV1 structure to test on. + meta := newXLMetaV1(8, 8) + + // Add 5 parts. + for _, test := range testCases { + meta.AddObjectPart(test.partNum, test.partName, test.etag, test.size) + } + + // Test for ObjectPartIndex() + for i, test := range testCases { + expected := test.index + got := meta.ObjectPartIndex(test.partNum) + if expected != got { + t.Errorf("Test %d: Expected %d, obtained %d", i+1, expected, got) + } + } + + offsetCases := []struct { + offset int64 + partIndex int + partOffset int64 + }{ + {4 * 1024 * 1024, 0, 4 * 1024 * 1024}, + {8 * 1024 * 1024, 1, 3145727}, + {12 * 1024 * 1024, 2, 2097149}, + {16 * 1024 * 1024, 3, 1048569}, + {20 * 1024 * 1024, 3, 5242873}, + {24 * 1024 * 1024, 4, 4194292}, + } + + // Test for ObjectToPartOffset() + for i, test := range offsetCases { + expectedIndex := test.partIndex + expectedOffset := test.partOffset + gotIndex, gotOffset, err := meta.ObjectToPartOffset(test.offset) + if err != nil { + t.Errorf("Test %d: %s", i+1, err) + } + if gotIndex != expectedIndex { + t.Errorf("Test %d: Expected %v got %v", i+1, expectedIndex, gotIndex) + } + if gotOffset != expectedOffset { + t.Errorf("Test %d: Expected %v got %v", i+1, expectedOffset, gotOffset) + } + } +}