1package s3_test
2
3import (
4	"net/http"
5	"net/http/httptest"
6	"strings"
7	"testing"
8
9	"github.com/aws/aws-sdk-go/aws"
10	"github.com/aws/aws-sdk-go/awstesting/unit"
11	"github.com/aws/aws-sdk-go/service/s3"
12)
13
14const (
15	metaKeyPrefix = `X-Amz-Meta-`
16	utf8KeySuffix = `My-Info`
17	utf8Value     = "hello-世界\u0444"
18)
19
20func TestPutObjectMetadataWithUnicode(t *testing.T) {
21	server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
22		if e, a := utf8Value, r.Header.Get(metaKeyPrefix+utf8KeySuffix); e != a {
23			t.Errorf("expected %s, but received %s", e, a)
24		}
25	}))
26	defer server.Close()
27
28	svc := s3.New(unit.Session, &aws.Config{
29		Endpoint:   aws.String(server.URL),
30		DisableSSL: aws.Bool(true),
31	})
32
33	_, err := svc.PutObject(&s3.PutObjectInput{
34		Bucket: aws.String("my_bucket"),
35		Key:    aws.String("my_key"),
36		Body:   strings.NewReader(""),
37		Metadata: func() map[string]*string {
38			v := map[string]*string{}
39			v[utf8KeySuffix] = aws.String(utf8Value)
40			return v
41		}(),
42	})
43
44	if err != nil {
45		t.Errorf("expected no error, but received %v", err)
46	}
47}
48
49func TestGetObjectMetadataWithUnicode(t *testing.T) {
50	server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
51		w.Header().Set(metaKeyPrefix+utf8KeySuffix, utf8Value)
52	}))
53	defer server.Close()
54
55	svc := s3.New(unit.Session, &aws.Config{
56		Endpoint:   aws.String(server.URL),
57		DisableSSL: aws.Bool(true),
58	})
59
60	resp, err := svc.GetObject(&s3.GetObjectInput{
61		Bucket: aws.String("my_bucket"),
62		Key:    aws.String("my_key"),
63	})
64
65	if err != nil {
66		t.Errorf("expected no error, but received %v", err)
67	}
68	resp.Body.Close()
69
70	if e, a := utf8Value, *resp.Metadata[utf8KeySuffix]; e != a {
71		t.Errorf("expected %s, but received %s", e, a)
72	}
73
74}
75