private Test mapTest( PuzzleTestDto puzzleTest, Runner runner, Map<String, ByteArrayOutputStream> testFiles) throws IOException { Test test = new Test(); test.setIndex(Integer.parseInt(puzzleTest.getIndex())); test.setRunner(runner); test = testRepository.save(test); String inputFileName = test.getId() + "/" + puzzleTest.getIndex() + ".txt"; if (testFiles == null) { storage.uploadPublic( testsBucket, inputFileName, new ByteArrayInputStream(puzzleTest.getData().getBytes()), "text/plain"); } else { storage.uploadPublic( testsBucket, inputFileName, new ByteArrayInputStream(testFiles.get(puzzleTest.getData()).toByteArray()), "text/plain"); } storage.upload( testsBucket, test.getId() + "/output.txt", new ByteArrayInputStream(puzzleTest.getSolution().getBytes()), "text/plain"); Map<String, String> testParams = new HashMap<>(); testParams.put("test", testsBucket + "/" + test.getId() + "/output.txt"); testParams.put("stdin", testsBucket + "/" + inputFileName); test.setParams(testParams); test = testRepository.save(test); test.setRunner(runner); return test; }
private Map<String, ByteArrayOutputStream> unzip(byte[] zipbytes) throws IOException { final int bufSize = 2048; Map<String, ByteArrayOutputStream> map = new HashMap<>(); ZipInputStream zip = new ZipInputStream(new ByteArrayInputStream(zipbytes)); ZipEntry entry; byte[] buf = new byte[bufSize]; while ((entry = zip.getNextEntry()) != null) { String fileName = entry.getName().substring(entry.getName().indexOf("/") + 1); ByteArrayOutputStream baos = new ByteArrayOutputStream(); int count; while ((count = zip.read(buf, 0, bufSize)) != -1) { baos.write(buf, 0, count); } map.put(fileName, baos); } return map; }