mirror of
https://github.com/Dokploy/dokploy
synced 2025-06-26 18:27:59 +00:00
feat(test): add test to prevent add hash to dokploy-network
This commit is contained in:
@@ -279,3 +279,55 @@ test("Add prefix to networks with static prefix", () => {
|
|||||||
) as ComposeSpecification;
|
) as ComposeSpecification;
|
||||||
expect(networks).toStrictEqual(expectedComposeData.networks);
|
expect(networks).toStrictEqual(expectedComposeData.networks);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const composeFile7 = `
|
||||||
|
version: "3.8"
|
||||||
|
|
||||||
|
services:
|
||||||
|
web:
|
||||||
|
image: nginx:latest
|
||||||
|
networks:
|
||||||
|
- dokploy-network
|
||||||
|
|
||||||
|
networks:
|
||||||
|
dokploy-network:
|
||||||
|
`;
|
||||||
|
|
||||||
|
const expectedComposeFile7 = `
|
||||||
|
version: "3.8"
|
||||||
|
|
||||||
|
services:
|
||||||
|
web:
|
||||||
|
image: nginx:latest
|
||||||
|
networks:
|
||||||
|
- dokploy-network
|
||||||
|
|
||||||
|
networks:
|
||||||
|
dokploy-network:
|
||||||
|
driver: bridge
|
||||||
|
driver_opts:
|
||||||
|
com.docker.network.driver.mtu: 1200
|
||||||
|
|
||||||
|
backend:
|
||||||
|
driver: bridge
|
||||||
|
attachable: true
|
||||||
|
|
||||||
|
external_network:
|
||||||
|
external: true
|
||||||
|
name: dokploy-network
|
||||||
|
`;
|
||||||
|
test("It shoudn't add prefix to dokploy-network", () => {
|
||||||
|
const composeData = load(composeFile7) as ComposeSpecification;
|
||||||
|
|
||||||
|
const prefix = generateRandomHash();
|
||||||
|
|
||||||
|
if (!composeData?.networks) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const networks = addPrefixToNetworksRoot(composeData.networks, prefix);
|
||||||
|
|
||||||
|
expect(networks).toBeDefined();
|
||||||
|
for (const networkKey of Object.keys(networks)) {
|
||||||
|
expect(networkKey).toContain("dokploy-network");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|||||||
@@ -182,3 +182,92 @@ test("Add prefix to networks in services (combined case)", () => {
|
|||||||
expect(redisNetworks).toHaveProperty(`backend-${prefix}`);
|
expect(redisNetworks).toHaveProperty(`backend-${prefix}`);
|
||||||
expect(redisNetworks).not.toHaveProperty("backend");
|
expect(redisNetworks).not.toHaveProperty("backend");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const composeFile7 = `
|
||||||
|
version: "3.8"
|
||||||
|
|
||||||
|
services:
|
||||||
|
web:
|
||||||
|
image: nginx:latest
|
||||||
|
networks:
|
||||||
|
- dokploy-network
|
||||||
|
`;
|
||||||
|
|
||||||
|
test("It shoudn't add prefix to dokploy-network in services", () => {
|
||||||
|
const composeData = load(composeFile7) as ComposeSpecification;
|
||||||
|
|
||||||
|
const prefix = generateRandomHash();
|
||||||
|
|
||||||
|
if (!composeData?.services) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const networks = addPrefixToServiceNetworks(composeData.services, prefix);
|
||||||
|
const service = networks.web;
|
||||||
|
|
||||||
|
expect(service).toBeDefined();
|
||||||
|
expect(service?.networks).toContain("dokploy-network");
|
||||||
|
});
|
||||||
|
|
||||||
|
const composeFile8 = `
|
||||||
|
version: "3.8"
|
||||||
|
|
||||||
|
services:
|
||||||
|
web:
|
||||||
|
image: nginx:latest
|
||||||
|
networks:
|
||||||
|
- frontend
|
||||||
|
- backend
|
||||||
|
- dokploy-network
|
||||||
|
|
||||||
|
|
||||||
|
api:
|
||||||
|
image: myapi:latest
|
||||||
|
networks:
|
||||||
|
frontend:
|
||||||
|
aliases:
|
||||||
|
- api
|
||||||
|
dokploy-network:
|
||||||
|
aliases:
|
||||||
|
- api
|
||||||
|
redis:
|
||||||
|
image: redis:alpine
|
||||||
|
networks:
|
||||||
|
dokploy-network:
|
||||||
|
db:
|
||||||
|
image: myapi:latest
|
||||||
|
networks:
|
||||||
|
dokploy-network:
|
||||||
|
aliases:
|
||||||
|
- apid
|
||||||
|
|
||||||
|
`;
|
||||||
|
|
||||||
|
test("It shoudn't add prefix to dokploy-network in services multiples cases", () => {
|
||||||
|
const composeData = load(composeFile8) as ComposeSpecification;
|
||||||
|
|
||||||
|
const prefix = generateRandomHash();
|
||||||
|
|
||||||
|
if (!composeData?.services) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const networks = addPrefixToServiceNetworks(composeData.services, prefix);
|
||||||
|
const service = networks.web;
|
||||||
|
const api = networks.api;
|
||||||
|
const redis = networks.redis;
|
||||||
|
const db = networks.db;
|
||||||
|
|
||||||
|
const dbNetworks = db?.networks as {
|
||||||
|
[key: string]: unknown;
|
||||||
|
};
|
||||||
|
|
||||||
|
const apiNetworks = api?.networks as {
|
||||||
|
[key: string]: unknown;
|
||||||
|
};
|
||||||
|
|
||||||
|
expect(service).toBeDefined();
|
||||||
|
expect(service?.networks).toContain("dokploy-network");
|
||||||
|
|
||||||
|
expect(redis?.networks).toHaveProperty("dokploy-network");
|
||||||
|
expect(dbNetworks["dokploy-network"]).toBeDefined();
|
||||||
|
expect(apiNetworks["dokploy-network"]).toBeDefined();
|
||||||
|
});
|
||||||
|
|||||||
@@ -254,3 +254,82 @@ test("Add prefix to networks in compose file with multiple services and complex
|
|||||||
|
|
||||||
expect(updatedComposeData).toEqual(expectedComposeFile3);
|
expect(updatedComposeData).toEqual(expectedComposeFile3);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const composeFile4 = `
|
||||||
|
version: "3.8"
|
||||||
|
|
||||||
|
services:
|
||||||
|
app:
|
||||||
|
image: myapp:latest
|
||||||
|
networks:
|
||||||
|
frontend:
|
||||||
|
aliases:
|
||||||
|
- app
|
||||||
|
backend:
|
||||||
|
dokploy-network:
|
||||||
|
|
||||||
|
worker:
|
||||||
|
image: worker:latest
|
||||||
|
networks:
|
||||||
|
- backend
|
||||||
|
- dokploy-network
|
||||||
|
|
||||||
|
networks:
|
||||||
|
frontend:
|
||||||
|
driver: bridge
|
||||||
|
attachable: true
|
||||||
|
|
||||||
|
backend:
|
||||||
|
driver: bridge
|
||||||
|
driver_opts:
|
||||||
|
com.docker.network.bridge.enable_icc: "true"
|
||||||
|
|
||||||
|
dokploy-network:
|
||||||
|
driver: bridge
|
||||||
|
|
||||||
|
`;
|
||||||
|
|
||||||
|
const expectedComposeFile4 = load(`
|
||||||
|
version: "3.8"
|
||||||
|
|
||||||
|
services:
|
||||||
|
app:
|
||||||
|
image: myapp:latest
|
||||||
|
networks:
|
||||||
|
frontend-testhash:
|
||||||
|
aliases:
|
||||||
|
- app
|
||||||
|
backend-testhash:
|
||||||
|
dokploy-network:
|
||||||
|
|
||||||
|
worker:
|
||||||
|
image: worker:latest
|
||||||
|
networks:
|
||||||
|
- backend-testhash
|
||||||
|
- dokploy-network
|
||||||
|
|
||||||
|
networks:
|
||||||
|
frontend-testhash:
|
||||||
|
driver: bridge
|
||||||
|
attachable: true
|
||||||
|
|
||||||
|
backend-testhash:
|
||||||
|
driver: bridge
|
||||||
|
driver_opts:
|
||||||
|
com.docker.network.bridge.enable_icc: "true"
|
||||||
|
|
||||||
|
dokploy-network:
|
||||||
|
driver: bridge
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
`);
|
||||||
|
|
||||||
|
test("Expect don't add prefix to dokploy-network in compose file with multiple services and complex network configurations", () => {
|
||||||
|
const composeData = load(composeFile4) as ComposeSpecification;
|
||||||
|
|
||||||
|
const prefix = "testhash";
|
||||||
|
const updatedComposeData = addPrefixToAllNetworks(composeData, prefix);
|
||||||
|
console.log(updatedComposeData);
|
||||||
|
expect(updatedComposeData).toEqual(expectedComposeFile4);
|
||||||
|
});
|
||||||
|
|||||||
@@ -9,7 +9,12 @@ export const addPrefixToNetworksRoot = (
|
|||||||
networks: { [key: string]: DefinitionsNetwork },
|
networks: { [key: string]: DefinitionsNetwork },
|
||||||
prefix: string,
|
prefix: string,
|
||||||
): { [key: string]: DefinitionsNetwork } => {
|
): { [key: string]: DefinitionsNetwork } => {
|
||||||
return _.mapKeys(networks, (_value, key) => `${key}-${prefix}`);
|
return _.mapKeys(networks, (_value, key) => {
|
||||||
|
if (key === "dokploy-network") {
|
||||||
|
return "dokploy-network";
|
||||||
|
}
|
||||||
|
return `${key}-${prefix}`;
|
||||||
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
export const addPrefixToServiceNetworks = (
|
export const addPrefixToServiceNetworks = (
|
||||||
@@ -20,15 +25,20 @@ export const addPrefixToServiceNetworks = (
|
|||||||
if (service.networks) {
|
if (service.networks) {
|
||||||
// 1 Case the most common
|
// 1 Case the most common
|
||||||
if (Array.isArray(service.networks)) {
|
if (Array.isArray(service.networks)) {
|
||||||
service.networks = service.networks.map(
|
service.networks = service.networks.map((network: string) => {
|
||||||
(network: string) => `${network}-${prefix}`,
|
if (network === "dokploy-network") {
|
||||||
);
|
return "dokploy-network";
|
||||||
|
}
|
||||||
|
return `${network}-${prefix}`;
|
||||||
|
});
|
||||||
} else {
|
} else {
|
||||||
// 2 Case
|
// 2 Case
|
||||||
service.networks = _.mapKeys(
|
service.networks = _.mapKeys(service.networks, (_value, key) => {
|
||||||
service.networks,
|
if (key === "dokploy-network") {
|
||||||
(_value, key) => `${key}-${prefix}`,
|
return "dokploy-network";
|
||||||
);
|
}
|
||||||
|
return `${key}-${prefix}`;
|
||||||
|
});
|
||||||
|
|
||||||
// 3 Case
|
// 3 Case
|
||||||
service.networks = _.mapValues(service.networks, (value) => {
|
service.networks = _.mapValues(service.networks, (value) => {
|
||||||
@@ -40,6 +50,7 @@ export const addPrefixToServiceNetworks = (
|
|||||||
return `${innerKey}-${prefix}`;
|
return `${innerKey}-${prefix}`;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
return value;
|
return value;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user