83 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
		
		
			
		
	
	
			83 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| 
								 | 
							
								// Imports
							 | 
						||
| 
								 | 
							
								import * as path from 'path';
							 | 
						||
| 
								 | 
							
								import {helper as h} from './helper';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Tests
							 | 
						||
| 
								 | 
							
								h.runForAllSupportedSchemes((scheme, port) => describe(`integration (on ${scheme.toUpperCase()})`, () => {
							 | 
						||
| 
								 | 
							
								  const hostname = h.nginxHostname;
							 | 
						||
| 
								 | 
							
								  const host = `${hostname}:${port}`;
							 | 
						||
| 
								 | 
							
								  const pr9 = '9';
							 | 
						||
| 
								 | 
							
								  const sha9 = '9'.repeat(40);
							 | 
						||
| 
								 | 
							
								  const sha0 = '0'.repeat(40);
							 | 
						||
| 
								 | 
							
								  const archivePath = path.join(h.buildsDir, 'snapshot.tar.gz');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const getFile = (pr: string, sha: string, file: string) =>
							 | 
						||
| 
								 | 
							
								    h.runCmd(`curl -iL ${scheme}://pr${pr}-${sha}.${host}/${file}`);
							 | 
						||
| 
								 | 
							
								  const uploadBuild = (pr: string, sha: string, archive: string) =>
							 | 
						||
| 
								 | 
							
								    h.runCmd(`curl -iLX POST --data-binary "@${archive}" ${scheme}://${host}/create-build/${pr}/${sha}`);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  beforeEach(() => jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000);
							 | 
						||
| 
								 | 
							
								  afterEach(() => {
							 | 
						||
| 
								 | 
							
								    h.deletePrDir(pr9);
							 | 
						||
| 
								 | 
							
								    h.cleanUp();
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  it('should be able to upload and serve a build for a new PR', done => {
							 | 
						||
| 
								 | 
							
								    const regexPrefix9 = `^PR: uploaded\\/${pr9} \\| SHA: ${sha9} \\| File:`;
							 | 
						||
| 
								 | 
							
								    const idxContentRegex9 = new RegExp(`${regexPrefix9} \\/index\\.html$`);
							 | 
						||
| 
								 | 
							
								    const barContentRegex9 = new RegExp(`${regexPrefix9} \\/foo\\/bar\\.js$`);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    h.createDummyArchive(pr9, sha9, archivePath);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    uploadBuild(pr9, sha9, archivePath).
							 | 
						||
| 
								 | 
							
								      then(() => Promise.all([
							 | 
						||
| 
								 | 
							
								        getFile(pr9, sha9, 'index.html').then(h.verifyResponse(200, idxContentRegex9)),
							 | 
						||
| 
								 | 
							
								        getFile(pr9, sha9, 'foo/bar.js').then(h.verifyResponse(200, barContentRegex9)),
							 | 
						||
| 
								 | 
							
								      ])).
							 | 
						||
| 
								 | 
							
								      then(done);
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  it('should be able to upload and serve a build for an existing PR', done => {
							 | 
						||
| 
								 | 
							
								    const regexPrefix0 = `^PR: ${pr9} \\| SHA: ${sha0} \\| File:`;
							 | 
						||
| 
								 | 
							
								    const idxContentRegex0 = new RegExp(`${regexPrefix0} \\/index\\.html$`);
							 | 
						||
| 
								 | 
							
								    const barContentRegex0 = new RegExp(`${regexPrefix0} \\/foo\\/bar\\.js$`);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    const regexPrefix9 = `^PR: uploaded\\/${pr9} \\| SHA: ${sha9} \\| File:`;
							 | 
						||
| 
								 | 
							
								    const idxContentRegex9 = new RegExp(`${regexPrefix9} \\/index\\.html$`);
							 | 
						||
| 
								 | 
							
								    const barContentRegex9 = new RegExp(`${regexPrefix9} \\/foo\\/bar\\.js$`);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    h.createDummyBuild(pr9, sha0);
							 | 
						||
| 
								 | 
							
								    h.createDummyArchive(pr9, sha9, archivePath);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    uploadBuild(pr9, sha9, archivePath).
							 | 
						||
| 
								 | 
							
								      then(() => Promise.all([
							 | 
						||
| 
								 | 
							
								        getFile(pr9, sha0, 'index.html').then(h.verifyResponse(200, idxContentRegex0)),
							 | 
						||
| 
								 | 
							
								        getFile(pr9, sha0, 'foo/bar.js').then(h.verifyResponse(200, barContentRegex0)),
							 | 
						||
| 
								 | 
							
								        getFile(pr9, sha9, 'index.html').then(h.verifyResponse(200, idxContentRegex9)),
							 | 
						||
| 
								 | 
							
								        getFile(pr9, sha9, 'foo/bar.js').then(h.verifyResponse(200, barContentRegex9)),
							 | 
						||
| 
								 | 
							
								      ])).
							 | 
						||
| 
								 | 
							
								      then(done);
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  it('should not be able to overwrite a build', done => {
							 | 
						||
| 
								 | 
							
								    const regexPrefix9 = `^PR: ${pr9} \\| SHA: ${sha9} \\| File:`;
							 | 
						||
| 
								 | 
							
								    const idxContentRegex9 = new RegExp(`${regexPrefix9} \\/index\\.html$`);
							 | 
						||
| 
								 | 
							
								    const barContentRegex9 = new RegExp(`${regexPrefix9} \\/foo\\/bar\\.js$`);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    h.createDummyBuild(pr9, sha9);
							 | 
						||
| 
								 | 
							
								    h.createDummyArchive(pr9, sha9, archivePath);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    uploadBuild(pr9, sha9, archivePath).
							 | 
						||
| 
								 | 
							
								      then(h.verifyResponse(403)).
							 | 
						||
| 
								 | 
							
								      then(() => Promise.all([
							 | 
						||
| 
								 | 
							
								        getFile(pr9, sha9, 'index.html').then(h.verifyResponse(200, idxContentRegex9)),
							 | 
						||
| 
								 | 
							
								        getFile(pr9, sha9, 'foo/bar.js').then(h.verifyResponse(200, barContentRegex9)),
							 | 
						||
| 
								 | 
							
								      ])).
							 | 
						||
| 
								 | 
							
								      then(done);
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								}));
							 |