Skip to content

Commit 678e197

Browse files
authored
Make MavenNoCompileTest more reliable (#6733)
1 parent acd4131 commit 678e197

5 files changed

Lines changed: 59 additions & 14 deletions

File tree

test/v2-migration-tests/src/test/java/software/amazon/awssdk/v2migrationtests/MavenNoCompileTest.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515

1616
package software.amazon.awssdk.v2migrationtests;
1717

18+
import static software.amazon.awssdk.v2migrationtests.TestUtils.assertTwoDirectoriesHaveSameStructure;
19+
import static software.amazon.awssdk.v2migrationtests.TestUtils.normalizeImports;
1820
import static software.amazon.awssdk.v2migrationtests.TestUtils.replaceVersion;
1921

2022
import java.io.File;
@@ -50,6 +52,8 @@ static void setUp() throws IOException {
5052
@Test
5153
@EnabledIf("versionAvailable")
5254
void mavenProject_shouldConvert() throws IOException {
53-
verifyTransformation();
55+
runTransformation();
56+
normalizeImports(mavenActual);
57+
assertTwoDirectoriesHaveSameStructure(mavenActual, mavenExpected);
5458
}
5559
}

test/v2-migration-tests/src/test/java/software/amazon/awssdk/v2migrationtests/MavenTestBase.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ protected static void deleteTempDirectories() throws IOException {
4747
FileUtils.deleteDirectory(mavenExpected.toFile());
4848
}
4949

50-
protected static void verifyTransformation() throws IOException {
50+
protected static void runTransformation() throws IOException {
5151
String recipeCmd = "-Drewrite.activeRecipes=software.amazon.awssdk.v2migration.AwsSdkJavaV1ToV2";
5252
List<String> rewriteArgs = new ArrayList<>();
5353
// pin version since updates have broken tests
@@ -57,6 +57,10 @@ protected static void verifyTransformation() throws IOException {
5757

5858
run(mavenActual, rewriteArgs.toArray(new String[0]));
5959
FileUtils.deleteDirectory(mavenActual.resolve("target").toFile());
60+
}
61+
62+
protected static void verifyTransformation() throws IOException {
63+
runTransformation();
6064
assertTwoDirectoriesHaveSameStructure(mavenActual, mavenExpected);
6165
}
6266

test/v2-migration-tests/src/test/java/software/amazon/awssdk/v2migrationtests/TestUtils.java

Lines changed: 41 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,8 @@
2020
import java.io.IOException;
2121
import java.io.InputStream;
2222
import java.io.UncheckedIOException;
23-
import java.net.HttpURLConnection;
24-
import java.net.Proxy;
25-
import java.net.URI;
23+
import java.util.ArrayList;
24+
import java.util.Collections;
2625
import java.nio.charset.StandardCharsets;
2726
import java.nio.file.Files;
2827
import java.nio.file.Path;
@@ -129,6 +128,45 @@ public static String toFileTreeString(Path root) {
129128
return sb.toString();
130129
}
131130

131+
public static void normalizeImports(Path directory) throws IOException {
132+
try (Stream<Path> paths = Files.walk(directory)) {
133+
paths.filter(p -> p.toString().endsWith(".java"))
134+
.forEach(TestUtils::normalizeFileImports);
135+
}
136+
}
137+
138+
private static void normalizeFileImports(Path file) {
139+
try {
140+
List<String> lines = Files.readAllLines(file);
141+
int importStart = -1;
142+
int importEnd = -1;
143+
List<String> imports = new ArrayList<>();
144+
145+
for (int i = 0; i < lines.size(); i++) {
146+
String line = lines.get(i);
147+
if (line.startsWith("import ")) {
148+
if (importStart == -1) {
149+
importStart = i;
150+
}
151+
importEnd = i;
152+
imports.add(line);
153+
} else if (importStart != -1 && line.startsWith("public class ")) {
154+
break;
155+
}
156+
}
157+
158+
if (importStart != -1) {
159+
Collections.sort(imports);
160+
List<String> result = new ArrayList<>(lines.subList(0, importStart));
161+
result.addAll(imports);
162+
result.addAll(lines.subList(importEnd + 1, lines.size()));
163+
Files.write(file, result);
164+
}
165+
} catch (IOException e) {
166+
throw new UncheckedIOException(e);
167+
}
168+
}
169+
132170
public static Result run(Path dir, String... args) {
133171
ProcessBuilder processBuilder = new ProcessBuilder(args);
134172
processBuilder.redirectErrorStream(true);

test/v2-migration-tests/src/test/resources/software/amazon/awssdk/v2migrationtests/maven-nocompile/after/src/main/java/foo/bar/S3EnDateTime.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,11 @@
1414
*/
1515

1616
package foo.bar;
17+
import org.joda.time.DateTime;
18+
import software.amazon.awssdk.eventnotifications.s3.model.GlacierEventData;
19+
import software.amazon.awssdk.eventnotifications.s3.model.RestoreEventData;
1720
import software.amazon.awssdk.eventnotifications.s3.model.S3EventNotification;
1821
import software.amazon.awssdk.eventnotifications.s3.model.S3EventNotificationRecord;
19-
import software.amazon.awssdk.eventnotifications.s3.model.RestoreEventData;
20-
import software.amazon.awssdk.eventnotifications.s3.model.GlacierEventData;
21-
import org.joda.time.DateTime;
2222

2323
public class S3EnDateTime {
2424

@@ -37,4 +37,4 @@ public void parseEvent(String jsonInput) {
3737
}
3838
}
3939

40-
}
40+
}

test/v2-migration-tests/src/test/resources/software/amazon/awssdk/v2migrationtests/maven-nocompile/after/src/main/java/foo/bar/S3Transforms.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,10 @@
1818
import com.amazonaws.HttpMethod;
1919
import com.amazonaws.services.s3.model.SSEAwsKeyManagementParams;
2020
import com.amazonaws.services.s3.model.SSECustomerKey;
21+
import java.io.ByteArrayInputStream;
22+
import java.io.InputStream;
23+
import java.net.URL;
24+
import java.util.Date;
2125
import software.amazon.awssdk.core.async.AsyncRequestBody;
2226
import software.amazon.awssdk.services.s3.S3Client;
2327
import software.amazon.awssdk.services.s3.model.AccessControlPolicy;
@@ -30,11 +34,6 @@
3034
import software.amazon.awssdk.transfer.s3.S3TransferManager;
3135
import software.amazon.awssdk.transfer.s3.model.UploadRequest;
3236

33-
import java.io.ByteArrayInputStream;
34-
import java.io.InputStream;
35-
import java.net.URL;
36-
import java.util.Date;
37-
3837
public class S3Transforms {
3938

4039
S3Client s3;

0 commit comments

Comments
 (0)