mirror of
https://github.com/rclone/rclone.git
synced 2025-02-24 16:40:55 +08:00
s3: fix --s3-no-head panic: reflect: Elem of invalid type s3.PutObjectInput
In 22abd785eba35ca2 s3: implement reading and writing of metadata #111 The reading information of objects was refactored to use the s3.HeadObjectOutput structure. Unfortunately the code branch with `--s3-no-head` was not tested otherwise this panic would have been discovered. This shows that this is path is not integration tested, so this adds a new integration test. Fixes #6322
This commit is contained in:
parent
37bcc3df14
commit
31f0db544f
@ -4570,7 +4570,7 @@ func (o *Object) Update(ctx context.Context, in io.Reader, src fs.ObjectInfo, op
|
|||||||
// uploaded properly. If size < 0 then we need to do the HEAD.
|
// uploaded properly. If size < 0 then we need to do the HEAD.
|
||||||
if o.fs.opt.NoHead && size >= 0 {
|
if o.fs.opt.NoHead && size >= 0 {
|
||||||
var head s3.HeadObjectOutput
|
var head s3.HeadObjectOutput
|
||||||
structs.SetFrom(&head, req)
|
structs.SetFrom(&head, &req)
|
||||||
head.ETag = &md5sumHex // doesn't matter quotes are misssing
|
head.ETag = &md5sumHex // doesn't matter quotes are misssing
|
||||||
head.ContentLength = &size
|
head.ContentLength = &size
|
||||||
// If we have done a single part PUT request then we can read these
|
// If we have done a single part PUT request then we can read these
|
||||||
|
@ -67,8 +67,26 @@ func (f *Fs) InternalTestMetadata(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (f *Fs) InternalTestNoHead(t *testing.T) {
|
||||||
|
ctx := context.Background()
|
||||||
|
// Set NoHead for this test
|
||||||
|
f.opt.NoHead = true
|
||||||
|
defer func() {
|
||||||
|
f.opt.NoHead = false
|
||||||
|
}()
|
||||||
|
contents := random.String(1000)
|
||||||
|
item := fstest.NewItem("test-no-head", contents, fstest.Time("2001-05-06T04:05:06.499999999Z"))
|
||||||
|
obj := fstests.PutTestContents(ctx, t, f, &item, contents, true)
|
||||||
|
defer func() {
|
||||||
|
assert.NoError(t, obj.Remove(ctx))
|
||||||
|
}()
|
||||||
|
// PutTestcontests checks the received object
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
func (f *Fs) InternalTest(t *testing.T) {
|
func (f *Fs) InternalTest(t *testing.T) {
|
||||||
t.Run("Metadata", f.InternalTestMetadata)
|
t.Run("Metadata", f.InternalTestMetadata)
|
||||||
|
t.Run("NoHead", f.InternalTestNoHead)
|
||||||
}
|
}
|
||||||
|
|
||||||
var _ fstests.InternalTester = (*Fs)(nil)
|
var _ fstests.InternalTester = (*Fs)(nil)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user