Home / Class/ ProcessInfoTests Class — spring-boot Architecture

ProcessInfoTests Class — spring-boot Architecture

Architecture documentation for the ProcessInfoTests class in ProcessInfoTests.java from the spring-boot codebase.

Entity Profile

Source Code

core/spring-boot/src/test/java/org/springframework/boot/info/ProcessInfoTests.java lines 37–102

class ProcessInfoTests {

	@Test
	void processInfoIsAvailable() {
		ProcessInfo processInfo = new ProcessInfo();
		assertThat(processInfo.getCpus()).isEqualTo(Runtime.getRuntime().availableProcessors());
		assertThat(processInfo.getOwner()).isEqualTo(ProcessHandle.current().info().user().orElse(null));
		assertThat(processInfo.getPid()).isEqualTo(ProcessHandle.current().pid());
		assertThat(processInfo.getParentPid())
			.isEqualTo(ProcessHandle.current().parent().map(ProcessHandle::pid).orElse(null));
		if (ProcessHandle.current().info().startInstant().isPresent()) {
			assertThat(processInfo.getUptime()).isPositive();
			assertThat(processInfo.getStartTime()).isInThePast();
			assertThat(processInfo.getCurrentTime()).isAfter(processInfo.getStartTime());
		}
		else {
			assertThat(processInfo.getUptime()).isNull();
			assertThat(processInfo.getStartTime()).isNull();
			assertThat(processInfo.getCurrentTime()).isNotNull();
		}
		assertThat(processInfo.getTimezone()).isNotNull();
		assertThat(processInfo.getLocale()).isNotNull();
		assertThat(processInfo.getWorkingDirectory()).isNotBlank();
	}

	@Test
	void memoryInfoIsAvailable() {
		ProcessInfo processInfo = new ProcessInfo();
		MemoryUsageInfo heapUsageInfo = processInfo.getMemory().getHeap();
		assertThat(heapUsageInfo.getInit()).isPositive().isLessThanOrEqualTo(heapUsageInfo.getMax());
		assertThat(heapUsageInfo.getUsed()).isPositive().isLessThanOrEqualTo(heapUsageInfo.getCommitted());
		assertThat(heapUsageInfo.getCommitted()).isPositive().isLessThanOrEqualTo(heapUsageInfo.getMax());
		assertThat(heapUsageInfo.getMax()).isPositive();
		MemoryUsageInfo nonHeapUsageInfo = processInfo.getMemory().getNonHeap();
		assertThat(nonHeapUsageInfo.getInit()).isPositive();
		assertThat(nonHeapUsageInfo.getUsed()).isPositive().isLessThanOrEqualTo(nonHeapUsageInfo.getCommitted());
		assertThat(nonHeapUsageInfo.getCommitted()).isPositive();
		assertThat(nonHeapUsageInfo.getMax()).isEqualTo(-1);
		List<MemoryInfo.GarbageCollectorInfo> garbageCollectors = processInfo.getMemory().getGarbageCollectors();
		assertThat(garbageCollectors).isNotEmpty();
		assertThat(garbageCollectors).allSatisfy((garbageCollector) -> {
			assertThat(garbageCollector.getName()).isNotEmpty();
			assertThat(garbageCollector.getCollectionCount()).isNotNegative();
		});
	}

	@Test
	@EnabledForJreRange(min = JRE.JAVA_24)
	void virtualThreadsInfoIfAvailable() {
		ProcessInfo processInfo = new ProcessInfo();
		VirtualThreadsInfo virtualThreadsInfo = processInfo.getVirtualThreads();
		assertThat(virtualThreadsInfo).isNotNull();
		assertThat(virtualThreadsInfo.getMounted()).isGreaterThanOrEqualTo(0);
		assertThat(virtualThreadsInfo.getQueued()).isGreaterThanOrEqualTo(0);
		assertThat(virtualThreadsInfo.getParallelism()).isGreaterThan(0);
		assertThat(virtualThreadsInfo.getPoolSize()).isGreaterThanOrEqualTo(0);
	}

	@Test
	@EnabledForJreRange(max = JRE.JAVA_23)
	void virtualThreadsInfoIfNotAvailable() {
		ProcessInfo processInfo = new ProcessInfo();
		assertThat(processInfo.getVirtualThreads()).isNull();
	}

}

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free