2016-12-29 18:32:28 +00:00
|
|
|
package service
|
|
|
|
|
|
|
|
import (
|
|
|
|
"bytes"
|
|
|
|
"encoding/json"
|
|
|
|
"fmt"
|
|
|
|
"net/http"
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
)
|
|
|
|
|
2017-03-30 22:03:48 +00:00
|
|
|
func testOptionNotFound(t *testing.T, r *testResource) {
|
|
|
|
// id 6000 is not an actual option
|
|
|
|
inJson := `{"options":[
|
|
|
|
{"id":6000,"name":"aws_access_key_id","type":"string","value":"foo","read_only":false},
|
|
|
|
{"id":7,"name":"aws_firehose_period","type":"int","value":23,"read_only":false}]}`
|
|
|
|
buff := bytes.NewBufferString(inJson)
|
|
|
|
req, err := http.NewRequest("PATCH", r.server.URL+"/api/v1/kolide/options", buff)
|
|
|
|
require.Nil(t, err)
|
|
|
|
req.Header.Add("Authorization", fmt.Sprintf("Bearer %s", r.adminToken))
|
|
|
|
client := &http.Client{}
|
|
|
|
resp, err := client.Do(req)
|
|
|
|
require.Nil(t, err)
|
|
|
|
assert.Equal(t, http.StatusNotFound, resp.StatusCode)
|
|
|
|
}
|
2016-12-29 18:32:28 +00:00
|
|
|
|
2017-03-30 22:03:48 +00:00
|
|
|
func testGetOptions(t *testing.T, r *testResource) {
|
2016-12-29 18:32:28 +00:00
|
|
|
req, err := http.NewRequest("GET", r.server.URL+"/api/v1/kolide/options", nil)
|
|
|
|
require.Nil(t, err)
|
2017-01-17 16:43:59 +00:00
|
|
|
req.Header.Add("Authorization", fmt.Sprintf("Bearer %s", r.adminToken))
|
2016-12-29 18:32:28 +00:00
|
|
|
client := &http.Client{}
|
|
|
|
resp, err := client.Do(req)
|
|
|
|
require.Nil(t, err)
|
|
|
|
require.Equal(t, http.StatusOK, resp.StatusCode)
|
|
|
|
var optsResp optionsResponse
|
|
|
|
err = json.NewDecoder(resp.Body).Decode(&optsResp)
|
|
|
|
require.Nil(t, err)
|
|
|
|
require.NotNil(t, optsResp.Options)
|
|
|
|
assert.Equal(t, "aws_access_key_id", optsResp.Options[0].Name)
|
|
|
|
}
|
|
|
|
|
|
|
|
func testModifyOptions(t *testing.T, r *testResource) {
|
|
|
|
inJson := `{"options":[
|
|
|
|
{"id":6,"name":"aws_access_key_id","type":"string","value":"foo","read_only":false},
|
|
|
|
{"id":7,"name":"aws_firehose_period","type":"int","value":23,"read_only":false}]}`
|
|
|
|
buff := bytes.NewBufferString(inJson)
|
|
|
|
req, err := http.NewRequest("PATCH", r.server.URL+"/api/v1/kolide/options", buff)
|
|
|
|
require.Nil(t, err)
|
2017-01-17 16:43:59 +00:00
|
|
|
req.Header.Add("Authorization", fmt.Sprintf("Bearer %s", r.adminToken))
|
2016-12-29 18:32:28 +00:00
|
|
|
client := &http.Client{}
|
|
|
|
resp, err := client.Do(req)
|
|
|
|
require.Nil(t, err)
|
|
|
|
|
|
|
|
var optsResp optionsResponse
|
|
|
|
err = json.NewDecoder(resp.Body).Decode(&optsResp)
|
|
|
|
require.Nil(t, err)
|
|
|
|
require.NotNil(t, optsResp.Options)
|
|
|
|
require.Len(t, optsResp.Options, 2)
|
|
|
|
assert.Equal(t, "foo", optsResp.Options[0].GetValue())
|
|
|
|
assert.Equal(t, float64(23), optsResp.Options[1].GetValue())
|
|
|
|
}
|
|
|
|
|
|
|
|
func testModifyOptionsValidationFail(t *testing.T, r *testResource) {
|
|
|
|
inJson := `{"options":[
|
|
|
|
{"id":6,"name":"aws_access_key_id","type":"string","value":"foo","read_only":false},
|
|
|
|
{"id":7,"name":"aws_firehose_period","type":"int","value":"xxs","read_only":false}]}`
|
|
|
|
buff := bytes.NewBufferString(inJson)
|
|
|
|
req, err := http.NewRequest("PATCH", r.server.URL+"/api/v1/kolide/options", buff)
|
|
|
|
require.Nil(t, err)
|
2017-01-17 16:43:59 +00:00
|
|
|
req.Header.Add("Authorization", fmt.Sprintf("Bearer %s", r.adminToken))
|
2016-12-29 18:32:28 +00:00
|
|
|
client := &http.Client{}
|
|
|
|
resp, err := client.Do(req)
|
|
|
|
require.Nil(t, err)
|
|
|
|
assert.Equal(t, http.StatusUnprocessableEntity, resp.StatusCode)
|
|
|
|
var errStruct mockValidationError
|
|
|
|
err = json.NewDecoder(resp.Body).Decode(&errStruct)
|
|
|
|
require.Nil(t, err)
|
|
|
|
require.Len(t, errStruct.Errors, 1)
|
|
|
|
assert.Equal(t, "aws_firehose_period", errStruct.Errors[0].Name)
|
|
|
|
assert.Equal(t, "type mismatch", errStruct.Errors[0].Reason)
|
|
|
|
}
|