package org.arquillian.cube.docker.impl.client.config; import java.util.ArrayList; import java.util.Collection; import java.util.Random; import java.util.UUID; public class StarOperator { private static Random random = new Random(); private StarOperator(){ } public static void adaptPortBindingToParallelRun(CubeContainer cubeContainer) { final Collection<PortBinding> portBindings = cubeContainer.getPortBindings(); if (portBindings == null) { return; } for (PortBinding portBinding : portBindings) { final int randomPrivatePort = generateRandomPrivatePort(); portBinding.setBound(randomPrivatePort); } } public static void adaptLinksToParallelRun(UUID uuid, CubeContainer cubeContainer) { final Collection<Link> links = cubeContainer.getLinks(); if (links == null) { return; } for (Link link : links) { if (link.getName().endsWith("*")) { String linkTemplate = link.getName().substring(0, link.getName().lastIndexOf('*')); link.setName(generateNewName(linkTemplate, uuid)); String environmentVariable = linkTemplate.toUpperCase() + "_HOSTNAME=" + link.getName(); if (link.isAliasSet()) { link.setAlias(generateNewName(link.getAlias(), uuid)); environmentVariable = linkTemplate.toUpperCase() + "_HOSTNAME=" + link.getAlias(); } final Collection<String> env = cubeContainer.getEnv(); if (env != null) { // to avoid duplicates if (env.contains(environmentVariable)) { env.remove(environmentVariable); } } else { cubeContainer.setEnv(new ArrayList<>()); } cubeContainer.getEnv().add(environmentVariable); } } } public static String generateNewName(String containerName, UUID uuid) { return containerName + "_" + uuid; } private static int generateRandomPrivatePort() { final int randomPort = random.nextInt(16383); return randomPort + 49152; } }