mirror of
https://github.com/fnproject/fn.git
synced 2022-10-28 21:29:17 +03:00
123 lines
3.2 KiB
Go
123 lines
3.2 KiB
Go
// Copyright 2015 go-swagger maintainers
|
|
//
|
|
// 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 runtime
|
|
|
|
import (
|
|
"net/url"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
/*
|
|
type tstreadcloser struct {
|
|
closed bool
|
|
}
|
|
|
|
func (t *tstreadcloser) Read(p []byte) (int, error) { return 0, nil }
|
|
func (t *tstreadcloser) Close() error {
|
|
t.closed = true
|
|
return nil
|
|
}
|
|
|
|
func TestPeekingReader(t *testing.T) {
|
|
// just passes to original reader when nothing called
|
|
exp1 := []byte("original")
|
|
pr1 := &peekingReader{rdr: ioutil.NopCloser(bytes.NewReader(exp1))}
|
|
b1, err := ioutil.ReadAll(pr1)
|
|
if assert.NoError(t, err) {
|
|
assert.Equal(t, exp1, b1)
|
|
}
|
|
|
|
// uses actual when there was some buffering
|
|
exp2 := []byte("actual")
|
|
pt1, pt2 := []byte("a"), []byte("ctual")
|
|
pr2 := &peekingReader{
|
|
rdr: ioutil.NopCloser(bytes.NewReader(exp1)),
|
|
actual: io.MultiReader(bytes.NewReader(pt1), bytes.NewReader(pt2)),
|
|
peeked: pt1,
|
|
}
|
|
b2, err := ioutil.ReadAll(pr2)
|
|
if assert.NoError(t, err) {
|
|
assert.Equal(t, exp2, b2)
|
|
}
|
|
|
|
// closes original reader
|
|
tr := new(tstreadcloser)
|
|
pr3 := &peekingReader{
|
|
rdr: tr,
|
|
actual: ioutil.NopCloser(bytes.NewBuffer(nil)),
|
|
peeked: pt1,
|
|
}
|
|
|
|
|
|
// returns true when peeked previously with data
|
|
// returns true when peeked with data
|
|
}
|
|
*/
|
|
|
|
func TestJSONRequest(t *testing.T) {
|
|
req, err := JSONRequest("GET", "/swagger.json", nil)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, "GET", req.Method)
|
|
assert.Equal(t, JSONMime, req.Header.Get(HeaderContentType))
|
|
assert.Equal(t, JSONMime, req.Header.Get(HeaderAccept))
|
|
|
|
req, err = JSONRequest("GET", "%2", nil)
|
|
assert.Error(t, err)
|
|
assert.Nil(t, req)
|
|
}
|
|
|
|
//func TestCanHaveBody(t *testing.T) {
|
|
//assert.True(t, CanHaveBody("put"))
|
|
//assert.True(t, CanHaveBody("post"))
|
|
//assert.True(t, CanHaveBody("patch"))
|
|
//assert.True(t, CanHaveBody("delete"))
|
|
//assert.False(t, CanHaveBody(""))
|
|
//assert.False(t, CanHaveBody("get"))
|
|
//assert.False(t, CanHaveBody("options"))
|
|
//assert.False(t, CanHaveBody("head"))
|
|
//assert.False(t, CanHaveBody("invalid"))
|
|
//}
|
|
|
|
func TestReadSingle(t *testing.T) {
|
|
values := url.Values(make(map[string][]string))
|
|
values.Add("something", "the thing")
|
|
assert.Equal(t, "the thing", ReadSingleValue(tv(values), "something"))
|
|
assert.Empty(t, ReadSingleValue(tv(values), "notthere"))
|
|
}
|
|
|
|
func TestReadCollection(t *testing.T) {
|
|
values := url.Values(make(map[string][]string))
|
|
values.Add("something", "value1,value2")
|
|
assert.Equal(t, []string{"value1", "value2"}, ReadCollectionValue(tv(values), "something", "csv"))
|
|
assert.Empty(t, ReadCollectionValue(tv(values), "notthere", ""))
|
|
}
|
|
|
|
type tv map[string][]string
|
|
|
|
func (v tv) GetOK(key string) (value []string, hasKey bool, hasValue bool) {
|
|
value, hasKey = v[key]
|
|
if !hasKey {
|
|
return
|
|
}
|
|
if len(value) == 0 {
|
|
return
|
|
}
|
|
hasValue = true
|
|
return
|
|
|
|
}
|