Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Unit test for no resources in the target folder #1478

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 41 additions & 0 deletions org.eclipse.m2e.core.tests/resources/projects/demo/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.0.8</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>17</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>

</project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DemoApplication {

public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@

Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.example.demo;

import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class DemoApplicationTests {

@Test
void contextLoads() {
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
/*******************************************************************************
* Copyright (c) 2023 Alex Boyko and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*******************************************************************************/
package org.eclipse.m2e.core;

import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;

import java.io.ByteArrayInputStream;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Path;

import org.apache.commons.io.FileUtils;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.IPath;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.m2e.tests.common.AbstractMavenProjectTestCase;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

public class AppPropsNotCopiedIntoTargetTest extends AbstractMavenProjectTestCase {

private File projectDirectory;

@Override
@Before
public void setUp() throws Exception {
super.setUp();
setAutoBuilding(true);
projectDirectory = new File(Files.createTempDirectory("m2e-tests").toFile(), "demo");
projectDirectory.mkdirs();
copyDir(new File("resources/projects/demo"), projectDirectory);
}

@Override
@After
public void tearDown() throws Exception {
FileUtils.deleteDirectory(this.projectDirectory.getParentFile());
super.tearDown();
}

@Test
public void test() throws Exception {
IProject project = importProject(new File(projectDirectory, "pom.xml").toString());
waitForJobsToComplete(monitor);

IJavaProject jp = JavaCore.create(project);

assertTrue("Build Automatically is NOT on!", isAutoBuilding());

IPath rootPath = project.getWorkspace().getRoot().getLocation();

// Project imported for the first time and built - everything is properly in the target folder
assertTrue("'application.properties' is NOT in the output folder", rootPath.append(jp.getOutputLocation()).append("/application.properties").toFile()
.exists());
assertTrue("'DemoApplication.class' is NOT in the output folder", rootPath.append(jp.getOutputLocation())
.append("/com/example/demo/DemoApplication.class").makeAbsolute().toFile().exists());

IFile pomXml = project.getFile("pom.xml");
String content = Files.readString(Path.of(pomXml.getLocationURI()));
pomXml.setContents(new ByteArrayInputStream("Nothing".getBytes()), true, false, null);

waitForJobsToComplete(monitor);
Thread.sleep(5000);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@HannesWell can you please advice here? It seems waitForJobsToComplete is not enough here or @BoykoAlex maybe can explain why additional wait is required here...

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Basically waitForJobsToComplete wasn't enough. Removing Thread.sleep(...) calls makes it fail at line 76 AFAIR. There are ways to execute stuff async bypassing the Eclipse job queue, i.e. Display.asyncExec(...) or less likely CompletableFuture... I admit I didn't experiment any further with "waiting".

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@BoykoAlex can you probably replace this then with a loop that check if the file is deleted and if not waits a little time up to 5 seconds?

// Invalid pom file. JavaBuilder built java sources but MavenBuilder wqs unable to do anything hence no resources in the target folder except for compiled classes
assertFalse("'application.properties' hasn't been removed from the output folder", rootPath.append(jp.getOutputLocation()).append("/application.properties").toFile()
.exists());
assertTrue("'DemoApplication.class' should be created in the output folder by JavaBuilder", rootPath.append(jp.getOutputLocation())
.append("/com/example/demo/DemoApplication.class").toFile().exists());

pomXml.setContents(new ByteArrayInputStream(content.getBytes()), true, false, null);
waitForJobsToComplete(monitor);
Thread.sleep(5000);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same here replace with a loop that checks regualry with an upper bound instead of a fixed delay.

// Valid pom file. Compiled classes and resources should reappear in the target folder. However, resources are missing which makes the test fail
assertTrue("'DemoApplication.class' hasn't been created in the output folder", rootPath.append(jp.getOutputLocation())
.append("/com/example/demo/DemoApplication.class").toFile().exists());
assertTrue("'application.properties' hasn't been copied in the output folder", rootPath.append(jp.getOutputLocation()).append("/application.properties").toFile()
.exists());
}

}
Loading