From 60d4779889baedc44972d4749daa073efca3b25c Mon Sep 17 00:00:00 2001 From: Stefan Majewsky Date: Mon, 19 Feb 2018 21:30:33 +0100 Subject: reorganize code * Gophercloud dependencies move into subpackage gopherschwift. * Tests move into subpackage tests (to avoid import cycles). + Rename "Client" to "Backend". --- tests/field_test.go | 167 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 167 insertions(+) create mode 100644 tests/field_test.go (limited to 'tests/field_test.go') diff --git a/tests/field_test.go b/tests/field_test.go new file mode 100644 index 0000000..f3c03ca --- /dev/null +++ b/tests/field_test.go @@ -0,0 +1,167 @@ +/****************************************************************************** +* +* Copyright 2018 Stefan Majewsky +* +* 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 tests + +import ( + "net/http" + "strconv" + "testing" + + "github.com/majewsky/schwift" +) + +func TestFieldString(t *testing.T) { + hdr := make(schwift.AccountHeaders) + expectBool(t, hdr.TempURLKey().Exists(), false) + expectString(t, hdr.TempURLKey().Get(), "") + expectSuccess(t, hdr.Validate()) + + hdr["X-Account-Meta-Temp-Url-Key"] = "" + expectBool(t, hdr.TempURLKey().Exists(), false) + expectString(t, hdr.TempURLKey().Get(), "") + expectSuccess(t, hdr.Validate()) + + hdr["X-Account-Meta-Temp-Url-Key"] = "foo" + expectBool(t, hdr.TempURLKey().Exists(), true) + expectString(t, hdr.TempURLKey().Get(), "foo") + expectSuccess(t, hdr.Validate()) + + hdr.TempURLKey().Set("bar") + expectHeaders(t, hdr, map[string]string{ + "X-Account-Meta-Temp-Url-Key": "bar", + }) + hdr.TempURLKey().Clear() + expectHeaders(t, hdr, map[string]string{ + "X-Account-Meta-Temp-Url-Key": "", + }) + hdr.TempURLKey().Del() + expectHeaders(t, hdr, nil) + hdr.TempURLKey().Clear() + expectHeaders(t, hdr, map[string]string{ + "X-Account-Meta-Temp-Url-Key": "", + }) +} + +//////////////////////////////////////////////////////////////////////////////// + +func TestFieldTimestamp(t *testing.T) { + testWithAccount(t, func(a *schwift.Account) { + hdr, err := a.Headers() + if !expectSuccess(t, err) { + return + } + + expectBool(t, hdr.CreatedAt().Exists(), true) + + actual := float64(hdr.CreatedAt().Get().UnixNano()) / 1e9 + expected, _ := strconv.ParseFloat(hdr["X-Timestamp"], 64) + expectFloat64(t, actual, expected) + }) + + hdr := make(schwift.AccountHeaders) + expectBool(t, hdr.CreatedAt().Exists(), false) + expectBool(t, hdr.CreatedAt().Get().IsZero(), true) + expectSuccess(t, hdr.Validate()) + + hdr["X-Timestamp"] = "wtf" + expectBool(t, hdr.CreatedAt().Exists(), true) + expectBool(t, hdr.CreatedAt().Get().IsZero(), true) + expectError(t, hdr.Validate(), `Bad header X-Timestamp: strconv.ParseFloat: parsing "wtf": invalid syntax`) +} + +func TestFieldHTTPTimestamp(t *testing.T) { + testWithContainer(t, func(c *schwift.Container) { + obj := c.Object("test") + err := obj.Upload(nil, nil, nil) + if !expectSuccess(t, err) { + return + } + + hdr, err := obj.Headers() + if !expectSuccess(t, err) { + return + } + expectBool(t, hdr.UpdatedAt().Exists(), true) + + actual := hdr.UpdatedAt().Get() + expected, _ := http.ParseTime(hdr.Get("Last-Modified")) + expectInt64(t, actual.Unix(), expected.Unix()) + }) + + hdr := make(schwift.ObjectHeaders) + expectBool(t, hdr.UpdatedAt().Exists(), false) + expectBool(t, hdr.UpdatedAt().Get().IsZero(), true) + expectSuccess(t, hdr.Validate()) + + hdr["Last-Modified"] = "wtf" + expectBool(t, hdr.UpdatedAt().Exists(), true) + expectBool(t, hdr.UpdatedAt().Get().IsZero(), true) + expectError(t, hdr.Validate(), `Bad header Last-Modified: parsing time "wtf" as "Mon Jan _2 15:04:05 2006": cannot parse "wtf" as "Mon"`) +} + +//////////////////////////////////////////////////////////////////////////////// + +func TestFieldUint64(t *testing.T) { + hdr := make(schwift.AccountHeaders) + expectBool(t, hdr.BytesUsedQuota().Exists(), false) + expectUint64(t, hdr.BytesUsedQuota().Get(), 0) + expectSuccess(t, hdr.Validate()) + + hdr["X-Account-Meta-Quota-Bytes"] = "23" + expectBool(t, hdr.BytesUsedQuota().Exists(), true) + expectUint64(t, hdr.BytesUsedQuota().Get(), 23) + expectSuccess(t, hdr.Validate()) + + hdr["X-Account-Meta-Quota-Bytes"] = "-23" + expectBool(t, hdr.BytesUsedQuota().Exists(), true) + expectUint64(t, hdr.BytesUsedQuota().Get(), 0) + expectError(t, hdr.Validate(), `Bad header X-Account-Meta-Quota-Bytes: strconv.ParseUint: parsing "-23": invalid syntax`) + + hdr.BytesUsedQuota().Set(9001) + expectHeaders(t, hdr, map[string]string{ + "X-Account-Meta-Quota-Bytes": "9001", + }) + hdr.BytesUsedQuota().Clear() + expectHeaders(t, hdr, map[string]string{ + "X-Account-Meta-Quota-Bytes": "", + }) + hdr.BytesUsedQuota().Del() + expectHeaders(t, hdr, nil) + hdr.BytesUsedQuota().Clear() + expectHeaders(t, hdr, map[string]string{ + "X-Account-Meta-Quota-Bytes": "", + }) +} + +func TestFieldUint64Readonly(t *testing.T) { + hdr := make(schwift.AccountHeaders) + expectBool(t, hdr.BytesUsed().Exists(), false) + expectUint64(t, hdr.BytesUsed().Get(), 0) + expectSuccess(t, hdr.Validate()) + + hdr["X-Account-Bytes-Used"] = "23" + expectBool(t, hdr.BytesUsed().Exists(), true) + expectUint64(t, hdr.BytesUsed().Get(), 23) + expectSuccess(t, hdr.Validate()) + + hdr["X-Account-Bytes-Used"] = "-23" + expectBool(t, hdr.BytesUsed().Exists(), true) + expectUint64(t, hdr.BytesUsed().Get(), 0) + expectError(t, hdr.Validate(), `Bad header X-Account-Bytes-Used: strconv.ParseUint: parsing "-23": invalid syntax`) +} -- cgit v1.2.3