Add depot, attendant, jetfire, optimus, ota services with kustomize overlays
This commit is contained in:
156
services/ota_update_go/handlers/updatemanifestfile_add_test.go
Normal file
156
services/ota_update_go/handlers/updatemanifestfile_add_test.go
Normal file
@@ -0,0 +1,156 @@
|
||||
package handlers_test
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net/http"
|
||||
"otaupdate/handlers"
|
||||
"otaupdate/services"
|
||||
"testing"
|
||||
|
||||
"github.com/fiskerinc/cloud-services/pkg/db/queries/mocks"
|
||||
"github.com/fiskerinc/cloud-services/pkg/s3"
|
||||
smock "github.com/fiskerinc/cloud-services/pkg/s3/mock"
|
||||
th "github.com/fiskerinc/cloud-services/pkg/testhelper"
|
||||
)
|
||||
|
||||
func TestUpdateManifestFileAdd(t *testing.T) {
|
||||
formData := `--XXXXXX
|
||||
Content-Disposition: form-data; name="manifest_ecu_id"
|
||||
|
||||
1000
|
||||
--XXXXXX
|
||||
Content-Disposition: form-data; name="offset"
|
||||
|
||||
1111
|
||||
--XXXXXX
|
||||
Content-Disposition: form-data; name="version"
|
||||
|
||||
2000
|
||||
--XXXXXX
|
||||
Content-Disposition: form-data; name="checksum"
|
||||
|
||||
CE114E45
|
||||
--XXXXXX
|
||||
Content-Disposition: form-data; name="order"
|
||||
|
||||
1
|
||||
--XXXXXX
|
||||
Content-Disposition: form-data; name="type"
|
||||
|
||||
01 Bootloader
|
||||
--XXXXXX
|
||||
Content-Disposition: form-data; name="signature"
|
||||
|
||||
53e976bd61161e4f425186e560f0797767d10fd6f0116e224efc444fa014754cb299e51827468c03c9b06508740ed738b1ec14b9cc753a1875971e335408660e
|
||||
`
|
||||
|
||||
missingFile := fmt.Sprintf(`%v--XXXXXX--
|
||||
`, formData)
|
||||
|
||||
badFile := fmt.Sprintf(`%v--XXXXXX
|
||||
Content-Disposition: form-data; name="file"; filename="test.txt"
|
||||
Content-Type: text/plain
|
||||
Content-Length: 0
|
||||
|
||||
--XXXXXX--
|
||||
`, formData)
|
||||
|
||||
goodData := fmt.Sprintf(`%v--XXXXXX
|
||||
Content-Disposition: form-data; name="file"; filename="test.txt"
|
||||
Content-Type: text/plain
|
||||
|
||||
THIS IS A TEST FILE
|
||||
--XXXXXX--
|
||||
`, formData)
|
||||
|
||||
compare := th.JSONComparer{
|
||||
IgnoreProps: []string{"file_id", "url"},
|
||||
}
|
||||
defer compare.Close()
|
||||
|
||||
type TestCase struct {
|
||||
th.BasicHttpTest
|
||||
hasFileContent bool
|
||||
jsonCompare bool
|
||||
}
|
||||
|
||||
tests := []TestCase{
|
||||
{
|
||||
BasicHttpTest: th.BasicHttpTest{
|
||||
Name: "No data",
|
||||
Request: th.MakeTestMultipartRequest("http://example.com/manifestfile", "", "XXXXXX", nil),
|
||||
ExpectedStatus: http.StatusBadRequest,
|
||||
ExpectedResponse: `{"message":"requires file","error":"Bad Request"}`,
|
||||
},
|
||||
hasFileContent: false,
|
||||
},
|
||||
{
|
||||
BasicHttpTest: th.BasicHttpTest{
|
||||
Name: "Good data",
|
||||
Request: th.MakeTestMultipartRequest("http://example.com/manifestfile", goodData, "XXXXXX", nil),
|
||||
ExpectedStatus: http.StatusOK,
|
||||
ExpectedResponse: `{"file_id":"303ca940c940c645","manifest_ecu_id":1000,"filename":"test.txt","url":"https://upload-dev.fiskerdps.com/f453ae14-d89a-4e4f-9eae-fe7bcc456b55/test.txt","file_size":55,"checksum":"CE114E45","type":"bootloader","order":1,"write_region":{"offset":1111,"length":19}}`,
|
||||
},
|
||||
jsonCompare: true,
|
||||
hasFileContent: true,
|
||||
},
|
||||
{
|
||||
BasicHttpTest: th.BasicHttpTest{
|
||||
Name: "Missing file",
|
||||
Request: th.MakeTestMultipartRequest("http://example.com/manifestfile", missingFile, "XXXXXX", nil),
|
||||
ExpectedStatus: http.StatusBadRequest,
|
||||
ExpectedResponse: `{"message":"requires file","error":"Bad Request"}`,
|
||||
},
|
||||
hasFileContent: false,
|
||||
},
|
||||
{
|
||||
BasicHttpTest: th.BasicHttpTest{
|
||||
Name: "Bad file",
|
||||
Request: th.MakeTestMultipartRequest("http://example.com/manifestfile", badFile, "XXXXXX", nil),
|
||||
ExpectedStatus: http.StatusBadRequest,
|
||||
ExpectedResponse: `{"message":"Length gt 0","error":"Bad Request"}`,
|
||||
},
|
||||
hasFileContent: false,
|
||||
},
|
||||
}
|
||||
|
||||
for _, test := range tests {
|
||||
setup()
|
||||
w := th.ExecHTTPHandler(handlers.HandleUpdateManifestFileAdd, test.Request)
|
||||
|
||||
if w.Result().StatusCode != test.ExpectedStatus {
|
||||
t.Errorf(th.TestErrorTemplate, test.Name, test.ExpectedStatus, w.Result().StatusCode)
|
||||
}
|
||||
|
||||
if !test.jsonCompare && w.Body.String() != test.ExpectedResponse {
|
||||
t.Errorf(th.TestErrorTemplate, test.Name, test.ExpectedResponse, w.Body.String())
|
||||
}
|
||||
|
||||
if test.jsonCompare {
|
||||
diff, err := compare.GetDiff([]byte(test.ExpectedResponse), w.Body.Bytes())
|
||||
if err != nil {
|
||||
t.Errorf(th.TestErrorTemplate, test.Name, nil, err)
|
||||
}
|
||||
for key, value := range diff {
|
||||
body := w.Body.String()
|
||||
fmt.Println(body)
|
||||
t.Errorf(th.TestErrorTemplate, test.Name, key, value)
|
||||
}
|
||||
}
|
||||
|
||||
if test.hasFileContent {
|
||||
s3 := s3.GetS3().(*smock.S3Mock)
|
||||
content := string(s3.GetData())
|
||||
if len(content) == 0 {
|
||||
t.Errorf(th.TestErrorTemplate, test.Name, test.hasFileContent, fmt.Sprintf("Content size %v", len(content)))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func setup() {
|
||||
// Setup mocks
|
||||
s3.SetS3Instance(&smock.S3Mock{})
|
||||
services.GetDB().SetFileKeys(&mocks.MockFileKeys{})
|
||||
services.GetDB().SetUpdateManifests(&mocks.MockUpdateManifests{})
|
||||
}
|
||||
Reference in New Issue
Block a user