Skip to content

Commit 59cdc86

Browse files
committed
Adding 4.1 blob checksum parsing to Go module
1 parent afa81c0 commit 59cdc86

File tree

6 files changed

+182
-6
lines changed

6 files changed

+182
-6
lines changed

ds3-autogen-go/src/main/java/com/spectralogic/ds3autogen/go/GoCodeGenerator.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,7 @@
3232
import com.spectralogic.ds3autogen.go.generators.parser.JobListParserGenerator;
3333
import com.spectralogic.ds3autogen.go.generators.parser.TypeParserModelGenerator;
3434
import com.spectralogic.ds3autogen.go.generators.request.*;
35-
import com.spectralogic.ds3autogen.go.generators.response.BaseResponseGenerator;
36-
import com.spectralogic.ds3autogen.go.generators.response.GetObjectResponseGenerator;
37-
import com.spectralogic.ds3autogen.go.generators.response.NoResponseGenerator;
38-
import com.spectralogic.ds3autogen.go.generators.response.ResponseModelGenerator;
35+
import com.spectralogic.ds3autogen.go.generators.response.*;
3936
import com.spectralogic.ds3autogen.go.generators.type.BaseTypeGenerator;
4037
import com.spectralogic.ds3autogen.go.generators.type.TypeModelGenerator;
4138
import com.spectralogic.ds3autogen.go.models.client.Client;
@@ -215,6 +212,9 @@ static ResponseModelGenerator<?> getResponseGenerator(final Ds3Request ds3Reques
215212
if (isGetObjectAmazonS3Request(ds3Request)) {
216213
return new GetObjectResponseGenerator();
217214
}
215+
if (isHeadObjectRequest(ds3Request)) {
216+
return new HeadObjectResponseGenerator();
217+
}
218218
if (!hasResponsePayload(ds3Request.getDs3ResponseCodes())) {
219219
return new NoResponseGenerator();
220220
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
/*
2+
* ******************************************************************************
3+
* Copyright 2014-2018 Spectra Logic Corporation. All Rights Reserved.
4+
* Licensed under the Apache License, Version 2.0 (the "License"). You may not use
5+
* this file except in compliance with the License. A copy of the License is located at
6+
*
7+
* http://www.apache.org/licenses/LICENSE-2.0
8+
*
9+
* or in the "license" file accompanying this file.
10+
* This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
11+
* CONDITIONS OF ANY KIND, either express or implied. See the License for the
12+
* specific language governing permissions and limitations under the License.
13+
* ****************************************************************************
14+
*/
15+
16+
package com.spectralogic.ds3autogen.go.generators.response
17+
18+
import com.google.common.collect.ImmutableList
19+
import com.spectralogic.ds3autogen.api.models.apispec.Ds3ResponseCode
20+
import com.spectralogic.ds3autogen.go.models.response.ResponseCode
21+
import com.spectralogic.ds3autogen.go.utils.goIndent
22+
23+
class HeadObjectResponseGenerator : BaseResponseGenerator() {
24+
25+
override fun toResponsePayloadStruct(expectedResponseCodes: ImmutableList<Ds3ResponseCode>?): String {
26+
return "BlobChecksumType ChecksumType\n" +
27+
goIndent(1) + "BlobChecksums map[int64]string"
28+
}
29+
30+
/**
31+
* Converts a Ds3ResponseCode into a ResponseCode model which contains the Go
32+
* code for parsing the specified response.
33+
*/
34+
override fun toResponseCode(ds3ResponseCode: Ds3ResponseCode, responseName: String): ResponseCode {
35+
if (ds3ResponseCode.code == 200) {
36+
val parsingCode = "checksumType, err := getBlobChecksumType(webResponse.Header())\n" +
37+
goIndent(2) + "if err != nil {\n" +
38+
goIndent(3) + "return nil, err\n" +
39+
goIndent(2) + "}\n" +
40+
goIndent(2) + "checksumMap, err := getBlobChecksumMap(webResponse.Header())\n" +
41+
goIndent(2) + "if err != nil {\n" +
42+
goIndent(3) + "return nil, err\n" +
43+
goIndent(2) + "}\n" +
44+
goIndent(2) + "return &$responseName{BlobChecksumType: checksumType, BlobChecksums: checksumMap, Headers: webResponse.Header()}, nil"
45+
return ResponseCode(ds3ResponseCode.code, parsingCode)
46+
}
47+
return toStandardResponseCode(ds3ResponseCode, responseName)
48+
}
49+
}

ds3-autogen-go/src/test/java/com/spectralogic/ds3autogen/go/GoCodeGenerator_Test.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import com.spectralogic.ds3autogen.go.generators.request.*;
2323
import com.spectralogic.ds3autogen.go.generators.response.BaseResponseGenerator;
2424
import com.spectralogic.ds3autogen.go.generators.response.GetObjectResponseGenerator;
25+
import com.spectralogic.ds3autogen.go.generators.response.HeadObjectResponseGenerator;
2526
import com.spectralogic.ds3autogen.go.generators.response.NoResponseGenerator;
2627
import org.hamcrest.MatcherAssert;
2728
import org.junit.Test;
@@ -104,9 +105,11 @@ public void getResponseGeneratorTest() {
104105
// Amazon Get Object
105106
assertThat(getResponseGenerator(getRequestAmazonS3GetObject()), instanceOf(GetObjectResponseGenerator.class));
106107

108+
// Head Object
109+
assertThat(getResponseGenerator(getHeadObjectRequest()), instanceOf(HeadObjectResponseGenerator.class));
110+
107111
// Commands with no response payload
108112
assertThat(getResponseGenerator(getRequestDeleteNotification()), instanceOf(NoResponseGenerator.class));
109-
assertThat(getResponseGenerator(getHeadObjectRequest()), instanceOf(NoResponseGenerator.class));
110113

111114
// Commands with a standard response payload
112115
assertThat(getResponseGenerator(getRequestAmazonS3GetObject()), instanceOf(BaseResponseGenerator.class));

ds3-autogen-go/src/test/java/com/spectralogic/ds3autogen/go/GoFunctionalTests.java

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
public class GoFunctionalTests {
3737

3838
private final static Logger LOG = LoggerFactory.getLogger(GoFunctionalTests.class);
39-
private final static GeneratedCodeLogger CODE_LOGGER = new GeneratedCodeLogger(FileTypeToLog.REQUEST, LOG);
39+
private final static GeneratedCodeLogger CODE_LOGGER = new GeneratedCodeLogger(FileTypeToLog.RESPONSE, LOG);
4040

4141
@Test
4242
public void simpleRequestNoPayload() throws IOException, TemplateModelException {
@@ -1306,4 +1306,42 @@ public void putBucketSpectraS3Test() throws IOException, TemplateModelException
13061306
assertTrue(requestCode.contains("func (putBucketSpectraS3Request *PutBucketSpectraS3Request) WithUserId(userId string) *PutBucketSpectraS3Request {"));
13071307
assertTrue(requestCode.contains("putBucketSpectraS3Request.UserId = &userId"));
13081308
}
1309+
1310+
@Test
1311+
public void headObjectTest() throws IOException, TemplateModelException {
1312+
final String requestName = "HeadObjectRequest";
1313+
final FileUtils fileUtils = mock(FileUtils.class);
1314+
final GoTestCodeUtil codeGenerator = new GoTestCodeUtil(fileUtils, requestName);
1315+
1316+
codeGenerator.generateCode(fileUtils, "/input/headObjectRequest.xml");
1317+
1318+
// Verify Request file was generated
1319+
final String requestCode = codeGenerator.getRequestCode();
1320+
CODE_LOGGER.logFile(requestCode, FileTypeToLog.REQUEST);
1321+
assertTrue(hasContent(requestCode));
1322+
1323+
assertTrue(requestCode.contains("type HeadObjectRequest struct {"));
1324+
assertTrue(requestCode.contains("BucketName string"));
1325+
assertTrue(requestCode.contains("ObjectName string"));
1326+
1327+
assertTrue(requestCode.contains("func NewHeadObjectRequest(bucketName string, objectName string) *HeadObjectRequest {"));
1328+
assertTrue(requestCode.contains("BucketName: bucketName,"));
1329+
assertTrue(requestCode.contains("ObjectName: objectName,"));
1330+
1331+
// Verify Response file was generated
1332+
final String responseCode = codeGenerator.getResponseCode();
1333+
CODE_LOGGER.logFile(responseCode, FileTypeToLog.RESPONSE);
1334+
assertTrue(hasContent(responseCode));
1335+
1336+
assertTrue(responseCode.contains("type HeadObjectResponse struct {"));
1337+
assertTrue(responseCode.contains("BlobChecksumType ChecksumType"));
1338+
assertTrue(responseCode.contains("BlobChecksums map[int64]string"));
1339+
assertTrue(responseCode.contains("Headers *http.Header"));
1340+
1341+
assertTrue(responseCode.contains("func NewHeadObjectResponse(webResponse WebResponse) (*HeadObjectResponse, error) {"));
1342+
assertTrue(responseCode.contains("expectedStatusCodes := []int { 200 }"));
1343+
assertTrue(responseCode.contains("checksumType, err := getBlobChecksumType(webResponse.Header())"));
1344+
assertTrue(responseCode.contains("checksumMap, err := getBlobChecksumMap(webResponse.Header())"));
1345+
assertTrue(responseCode.contains("return &HeadObjectResponse{BlobChecksumType: checksumType, BlobChecksums: checksumMap, Headers: webResponse.Header()}, nil"));
1346+
}
13091347
}
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
/*
2+
* ******************************************************************************
3+
* Copyright 2014-2018 Spectra Logic Corporation. All Rights Reserved.
4+
* Licensed under the Apache License, Version 2.0 (the "License"). You may not use
5+
* this file except in compliance with the License. A copy of the License is located at
6+
*
7+
* http://www.apache.org/licenses/LICENSE-2.0
8+
*
9+
* or in the "license" file accompanying this file.
10+
* This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
11+
* CONDITIONS OF ANY KIND, either express or implied. See the License for the
12+
* specific language governing permissions and limitations under the License.
13+
* ****************************************************************************
14+
*/
15+
16+
package com.spectralogic.ds3autogen.go.generators.response;
17+
import com.google.common.collect.ImmutableList;
18+
import com.spectralogic.ds3autogen.api.models.apispec.Ds3ResponseCode;
19+
import com.spectralogic.ds3autogen.api.models.apispec.Ds3ResponseType;
20+
import com.spectralogic.ds3autogen.go.models.response.ResponseCode;
21+
22+
import org.junit.Test;
23+
24+
import static com.spectralogic.ds3autogen.testutil.Ds3ModelFixtures.getHeadObjectRequest;
25+
import static org.hamcrest.CoreMatchers.is;
26+
import static org.junit.Assert.assertThat;
27+
28+
public class HeadObjectResponseGenerator_Test {
29+
30+
private final HeadObjectResponseGenerator generator = new HeadObjectResponseGenerator();
31+
32+
@Test
33+
public void toResponsePayloadStructTest() {
34+
final String expected = "BlobChecksumType ChecksumType\n" +
35+
" BlobChecksums map[int64]string";
36+
37+
assertThat(generator.toResponsePayloadStruct(getHeadObjectRequest().getDs3ResponseCodes()), is(expected));
38+
}
39+
40+
@Test
41+
public void toResponseCodeTest() {
42+
final String expected = "checksumType, err := getBlobChecksumType(webResponse.Header())\n" +
43+
" if err != nil {\n" +
44+
" return nil, err\n" +
45+
" }\n" +
46+
" checksumMap, err := getBlobChecksumMap(webResponse.Header())\n" +
47+
" if err != nil {\n" +
48+
" return nil, err\n" +
49+
" }\n" +
50+
" return &HeadObjectResponse{BlobChecksumType: checksumType, BlobChecksums: checksumMap, Headers: webResponse.Header()}, nil";
51+
52+
final Ds3ResponseCode ds3ResponseCode = new Ds3ResponseCode(200,
53+
ImmutableList.of(new Ds3ResponseType("null", null)));
54+
55+
final ResponseCode result = generator.toResponseCode(ds3ResponseCode, "HeadObjectResponse");
56+
assertThat(result.getCode(), is(200));
57+
assertThat(result.getParseResponse(), is(expected));
58+
}
59+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<Data>
2+
<Contract>
3+
<RequestHandlers>
4+
<RequestHandler Classification="amazons3" Name="com.spectralogic.s3.server.handler.reqhandler.amazons3.HeadObjectRequestHandler">
5+
<Request BucketRequirement="REQUIRED" HttpVerb="HEAD" IncludeIdInPath="false" ObjectRequirement="REQUIRED">
6+
<OptionalQueryParams/>
7+
<RequiredQueryParams/>
8+
</Request>
9+
<ResponseCodes>
10+
<ResponseCode>
11+
<Code>200</Code>
12+
<ResponseTypes>
13+
<ResponseType Type="null"/>
14+
</ResponseTypes>
15+
</ResponseCode>
16+
<ResponseCode>
17+
<Code>404</Code>
18+
<ResponseTypes>
19+
<ResponseType Type="com.spectralogic.s3.server.domain.HttpErrorResultApiBean"/>
20+
</ResponseTypes>
21+
</ResponseCode>
22+
</ResponseCodes>
23+
<Version>1.CF182CD57551902A475553F26582BC78</Version>
24+
</RequestHandler>
25+
</RequestHandlers>
26+
</Contract>
27+
</Data>

0 commit comments

Comments
 (0)