Skip to content

Commit

Permalink
start cf-mock
Browse files Browse the repository at this point in the history
  • Loading branch information
drewbo committed Dec 20, 2023
1 parent 12fd46d commit 6fc153e
Show file tree
Hide file tree
Showing 7 changed files with 101 additions and 5 deletions.
3 changes: 2 additions & 1 deletion api/services/S3PublishedFileLister.js
Original file line number Diff line number Diff line change
Expand Up @@ -66,9 +66,10 @@ function listFilesPaged(s3Client, path, startAtKey = null) {

function listPublishedPreviews(site) {
const previewPath = `preview/${site.owner}/${site.repository}/`;

console.log(previewPath)
return apiClient.fetchServiceInstanceCredentials(site.s3ServiceName)
.then((credentials) => {
console.log(credentials)
const s3Client = new S3Helper.S3Client({
accessKeyId: credentials.access_key_id,
secretAccessKey: credentials.secret_access_key,
Expand Down
13 changes: 13 additions & 0 deletions cf-mock/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
const express = require('express');
const router = require('./routers');
const responses = require('../api/responses');

const app = express();
const port = 1234;

app.use(responses);
app.use('/', router);

app.listen(port, () => {
console.log(`Example app listening on port ${port}`);
});
12 changes: 12 additions & 0 deletions cf-mock/routers/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
const express = require('express');

const apiRouter = express.Router();
const mainRouter = express.Router();

apiRouter.use(require('./service-credential-binding'));
// apiRouter.use(require('./build-task'));
// apiRouter.use(require('./build'));

mainRouter.use('/v3', apiRouter);

module.exports = mainRouter;
49 changes: 49 additions & 0 deletions cf-mock/routers/service-credential-binding.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
const crypto = require('crypto');
const router = require('express').Router();

const { createCFAPIResource, createCFAPIResourceList } = require('../../test/api/support/factory/cf-api-response');
const { Site } = require('../../api/models');

// TODO: move this, don't use a global
// on init, make a service credential binding for each site
const serviceCredentialBindings = [];
async function initServiceCredentialBindings() {
const sites = await Site.findAll();
sites.forEach((site) => {
const serviceCredentialBinding = {
name: site.s3ServiceName,
guid: crypto.randomUUID(),
siteInfo: site,
};
serviceCredentialBindings.push(serviceCredentialBinding);
});
}
initServiceCredentialBindings();

router.get('/service_credential_bindings', (req, res) => {
const name = req.query.service_instance_names;
const serviceCredentialBinding = serviceCredentialBindings.find(scb => scb.name === name);
if (!serviceCredentialBinding) {
return res.notFound();
}

const { guid } = serviceCredentialBinding;
const credentialsServiceInstance = createCFAPIResource({ name, guid });
const listCredentialServices = createCFAPIResourceList({
resources: [credentialsServiceInstance],
});
return res.send(listCredentialServices);
});

router.get('/service_credential_bindings/:guid/details', (req, res) => {
const service = serviceCredentialBindings.find(scb => scb.guid === req.params.guid);
const credentials = {
accessKeyId: 'test',
secretAccessKey: 'test',
region: service.siteInfo.awsBucketRegion,
bucket: service.siteInfo.awsBucketName,
};
return res.send(credentials);
});

module.exports = router;
19 changes: 18 additions & 1 deletion docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ services:
UAA_HOST: http://localhost:9000
UAA_HOST_DOCKER_URL: http://uaa:8080
USER_AUDITOR: federalist
CLOUD_FOUNDRY_API_HOST: https://api.example.com
CLOUD_FOUNDRY_API_HOST: http://cf-mock:1234
CLOUD_FOUNDRY_OAUTH_TOKEN_URL: https://login.example.com/oauth/token
CF_API_USERNAME: deploy_user
CF_API_PASSWORD: deploy_pass
Expand Down Expand Up @@ -137,6 +137,23 @@ services:
depends_on:
- localstack
- db # race condition waiting to happen as we don't wait for DB
environment:
NODE_ENV: development
AWS_ENDPOINT_URL: http://localstack:4566
cf-mock:
build:
dockerfile: Dockerfile-app
context: .
volumes:
- yarn:/usr/local/share/.cache/yarn
- .:/app
- nm-app:/app/node_modules
command: ["scripts/wait-for-it.sh", "db:5432", "--", "yarn", "cf-mock"]
ports:
- "1234:1234"
depends_on:
- db
- localstack
environment:
NODE_ENV: development
AWS_ENDPOINT_URL: http://localstack:4566
3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,8 @@
"test:e2e": "yarn playwright test",
"create-test-users": "DOTENV_CONFIG_PATH=.env node -r dotenv/config ./scripts/create-test-users.js",
"remove-test-users": "DOTENV_CONFIG_PATH=.env node -r dotenv/config ./scripts/remove-test-users.js",
"localstack-setup": "NODE_ENV=development node ./scripts/localstack-setup.js"
"localstack-setup": "NODE_ENV=development node ./scripts/localstack-setup.js",
"cf-mock": "NODE_ENV=development nodemon cf-mock/index.js"
},
"main": "index.js",
"repository": {
Expand Down
7 changes: 5 additions & 2 deletions test/api/support/factory/site.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ function generateUniqueAtts() {
owner: `repo-owner-${siteAttsStep}`,
repository: `repo-name-${siteAttsStep}`,
awsBucketName: `cg-bucket-name-${siteAttsStep}`,
s3ServiceName: `s3-service-${siteAttsStep}`,
};
siteAttsStep += 1;
return res;
Expand All @@ -21,13 +22,15 @@ function makeAttributes(overrides = {}) {
users = Promise.all([userFactory()]);
}

const { owner, repository, awsBucketName } = generateUniqueAtts();
const {
owner, repository, awsBucketName, s3ServiceName,
} = generateUniqueAtts();

return {
owner,
repository,
engine: 'jekyll',
s3ServiceName: 'federalist-dev-s3',
s3ServiceName,
awsBucketName,
awsBucketRegion: 'us-gov-west-1',
defaultBranch: 'main',
Expand Down

0 comments on commit 6fc153e

Please sign in to comment.