From d3771dd446a7738952b931944f9ed675dcdc0545 Mon Sep 17 00:00:00 2001 From: NicolasHuertas Date: Wed, 4 Dec 2024 23:23:24 -0500 Subject: [PATCH 1/6] Varying inputs example --- java/com/engflow/varyinginputs/README.md | 34 ++++++++++ java/com/engflow/varyinginputs/input/BUILD | 5 ++ java/com/engflow/varyinginputs/main/BUILD | 14 ++++ java/com/engflow/varyinginputs/main/Main.java | 30 +++++++++ java/com/engflow/varyinginputs/reader/BUILD | 14 ++++ .../engflow/varyinginputs/reader/Reader.java | 45 +++++++++++++ .../varyinginputs/reader/ReaderTest.java | 65 ++++++++++++++++++ java/com/engflow/varyinginputs/writer/BUILD | 14 ++++ .../engflow/varyinginputs/writer/Writer.java | 61 +++++++++++++++++ .../varyinginputs/writer/WriterTest.java | 66 +++++++++++++++++++ 10 files changed, 348 insertions(+) create mode 100644 java/com/engflow/varyinginputs/README.md create mode 100644 java/com/engflow/varyinginputs/input/BUILD create mode 100644 java/com/engflow/varyinginputs/main/BUILD create mode 100644 java/com/engflow/varyinginputs/main/Main.java create mode 100644 java/com/engflow/varyinginputs/reader/BUILD create mode 100644 java/com/engflow/varyinginputs/reader/Reader.java create mode 100644 java/com/engflow/varyinginputs/reader/ReaderTest.java create mode 100644 java/com/engflow/varyinginputs/writer/BUILD create mode 100644 java/com/engflow/varyinginputs/writer/Writer.java create mode 100644 java/com/engflow/varyinginputs/writer/WriterTest.java diff --git a/java/com/engflow/varyinginputs/README.md b/java/com/engflow/varyinginputs/README.md new file mode 100644 index 00000000..deea7ac1 --- /dev/null +++ b/java/com/engflow/varyinginputs/README.md @@ -0,0 +1,34 @@ +# Varying Inputs Example + +## Overview + +The goal of this example project is to test the performance of Engflow's remote execution and caching service for different input sizes. The project involves creating a specified number of txt files, each containing 100 random characters, using the `Writer` class, and then reading and printing out their contents with the `Reader` class. + +## Project Structure + +- `java/com/engflow/varyinginputs/input`: Directory where the generated `.txt` files are saved. +- `java/com/engflow/varyinginputs/main`: Contains the `Main` class which orchestrates the file creation and reading process. +- `java/com/engflow/varyinginputs/reader`: Contains the `Reader` class responsible for reading the files. +- `java/com/engflow/varyinginputs/writer`: Contains the `Writer` class responsible for writing the files. + +## Usage + +To run the project and specify the number of files to be created, use the following command: + +```sh +bazel run //java/com/engflow/varyinginputs/main -- +``` + +Replace `` with the desired number of files to be created. + +## Example + +To create and read 10 files, you would run: + +```sh +bazel run //java/com/engflow/varyinginputs/main -- 10 +``` + +This command will: +1. Use the `Writer` class to create 10 files, each containing 100 random characters, in the `input` directory. +2. Use the `Reader` class to read and print the contents of these files. \ No newline at end of file diff --git a/java/com/engflow/varyinginputs/input/BUILD b/java/com/engflow/varyinginputs/input/BUILD new file mode 100644 index 00000000..4b9e382f --- /dev/null +++ b/java/com/engflow/varyinginputs/input/BUILD @@ -0,0 +1,5 @@ +filegroup( + name = "input", + srcs = glob(["*.txt"]), + visibility = ["//visibility:public"], +) \ No newline at end of file diff --git a/java/com/engflow/varyinginputs/main/BUILD b/java/com/engflow/varyinginputs/main/BUILD new file mode 100644 index 00000000..f5302b9e --- /dev/null +++ b/java/com/engflow/varyinginputs/main/BUILD @@ -0,0 +1,14 @@ +load("@rules_java//java:defs.bzl", "java_binary") + +java_binary( + name = "main", + srcs = ["Main.java"], + deps = [ + "//java/com/engflow/varyinginputs/reader:reader", + "//java/com/engflow/varyinginputs/writer:writer", + ], + data = [ + "//java/com/engflow/varyinginputs/input:input", + ], + main_class = "com.engflow.varyinginputs.main.Main", +) \ No newline at end of file diff --git a/java/com/engflow/varyinginputs/main/Main.java b/java/com/engflow/varyinginputs/main/Main.java new file mode 100644 index 00000000..b8d44e86 --- /dev/null +++ b/java/com/engflow/varyinginputs/main/Main.java @@ -0,0 +1,30 @@ +package com.engflow.varyinginputs.main; + +import com.engflow.varyinginputs.reader.Reader; +import com.engflow.varyinginputs.writer.Writer; + +public class Main { + + public static void main(String[] args) { + if (args.length < 1) { + System.out.println("Please provide the number of files as an argument."); + return; + } + + int numberOfFiles; + try { + numberOfFiles = Integer.parseInt(args[0]); + } catch (NumberFormatException e) { + System.out.println("Invalid number format: " + args[0]); + return; + } + + Writer writer = new Writer(); + Reader reader = new Reader(); + + String filePath = "com/engflow/varyinginputs/input"; + + writer.writeFiles(numberOfFiles, filePath); + reader.readFiles(filePath); + } +} \ No newline at end of file diff --git a/java/com/engflow/varyinginputs/reader/BUILD b/java/com/engflow/varyinginputs/reader/BUILD new file mode 100644 index 00000000..4033aea4 --- /dev/null +++ b/java/com/engflow/varyinginputs/reader/BUILD @@ -0,0 +1,14 @@ +java_library( + name = "reader", + srcs = ["Reader.java"], + visibility = ["//visibility:public"], +) + +java_test( + name = "reader_test", + srcs = ["ReaderTest.java"], + test_class = "com.engflow.varyinginputs.reader.ReaderTest", + deps = [ + ":reader", + ], +) \ No newline at end of file diff --git a/java/com/engflow/varyinginputs/reader/Reader.java b/java/com/engflow/varyinginputs/reader/Reader.java new file mode 100644 index 00000000..7d106f2c --- /dev/null +++ b/java/com/engflow/varyinginputs/reader/Reader.java @@ -0,0 +1,45 @@ +package com.engflow.varyinginputs.reader; + +import java.io.File; +import java.io.FileReader; +import java.io.IOException; +import java.io.BufferedReader; + +public class Reader { + + /** + * Reads the content of all files in the specified directory and prints it to the console. + * @param inputPath + */ + public void readFiles(String inputPath) { + File directory = new File(inputPath); + + // Check if the directory exists and is a directory + if (!directory.exists() || !directory.isDirectory()) { + System.out.println("Invalid directory path: " + inputPath); + return; + } + + // List all files in the directory and check if there are any + File[] files = directory.listFiles(); + if (files == null || files.length == 0) { + System.out.println("No files found in the directory: " + inputPath); + return; + } + + // Read the content of each file and print it to the console + for (File file : files) { + if (file.isFile()) { + try (BufferedReader reader = new BufferedReader(new FileReader(file))) { + String line; + System.out.println("Reading file: " + file.getName()); + while ((line = reader.readLine()) != null) { + System.out.println(line); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + } + } +} \ No newline at end of file diff --git a/java/com/engflow/varyinginputs/reader/ReaderTest.java b/java/com/engflow/varyinginputs/reader/ReaderTest.java new file mode 100644 index 00000000..a303c364 --- /dev/null +++ b/java/com/engflow/varyinginputs/reader/ReaderTest.java @@ -0,0 +1,65 @@ +package com.engflow.varyinginputs.reader; + +import org.junit.Test; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import static org.junit.Assert.assertTrue; + +public class ReaderTest { + + @Test + public void testReadFilesPrintsFileContents() throws IOException { + Reader reader = new Reader(); + String inputPath = "test_input"; + String fileName = "testFile.txt"; + String fileContent = "Hello, World!"; + + // Set up test files + File directory = new File(inputPath); + directory.mkdirs(); + File testFile = new File(inputPath + "/" + fileName); + try (FileWriter writer = new FileWriter(testFile)) { + writer.write(fileContent); + } + + // Capture the output + java.io.ByteArrayOutputStream outContent = new java.io.ByteArrayOutputStream(); + System.setOut(new java.io.PrintStream(outContent)); + + // Run the method + reader.readFiles(inputPath); + + // Verify the output + String expectedOutput = "Reading file: " + fileName + "\n" + fileContent + "\n"; + assertTrue(outContent.toString().contains(expectedOutput)); + + // Clean up after test + testFile.delete(); + directory.delete(); + } + + @Test + public void testReadFilesHandlesEmptyDirectory() { + Reader reader = new Reader(); + String inputPath = "empty_test_input"; + + // Set up empty directory + File directory = new File(inputPath); + directory.mkdirs(); + + // Capture the output + java.io.ByteArrayOutputStream outContent = new java.io.ByteArrayOutputStream(); + System.setOut(new java.io.PrintStream(outContent)); + + // Run the method + reader.readFiles(inputPath); + + // Verify the output + String expectedOutput = "No files found in the directory: " + inputPath + "\n"; + assertTrue(outContent.toString().contains(expectedOutput)); + + // Clean up after test + directory.delete(); + } +} \ No newline at end of file diff --git a/java/com/engflow/varyinginputs/writer/BUILD b/java/com/engflow/varyinginputs/writer/BUILD new file mode 100644 index 00000000..1fc02ea5 --- /dev/null +++ b/java/com/engflow/varyinginputs/writer/BUILD @@ -0,0 +1,14 @@ +java_library( + name = "writer", + srcs = ["Writer.java"], + visibility = ["//visibility:public"], +) + +java_test( + name = "writer_test", + srcs = ["WriterTest.java"], + test_class = "com.engflow.varyinginputs.writer.WriterTest", + deps = [ + ":writer", + ], +) \ No newline at end of file diff --git a/java/com/engflow/varyinginputs/writer/Writer.java b/java/com/engflow/varyinginputs/writer/Writer.java new file mode 100644 index 00000000..5d911ecc --- /dev/null +++ b/java/com/engflow/varyinginputs/writer/Writer.java @@ -0,0 +1,61 @@ +package com.engflow.varyinginputs.writer; + +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.util.Random; +import java.util.UUID; + +public class Writer { + + /** + * Write the specified number of files to the output path. + * @param numberOfFiles + * @param outputPath + */ + public void writeFiles(int numberOfFiles, String outputPath) { + File directory = new File(outputPath); + + if (!directory.exists()) { + directory.mkdirs(); + } + + // list all files in the directory and count them + File[] existingFiles = directory.listFiles(); + int existingFilesCount = existingFiles != null ? existingFiles.length : 0; + + Random random = new Random(); + + // create new files if the number of existing files is less than the required number + if (existingFilesCount < numberOfFiles) { + for (int i = existingFilesCount; i < numberOfFiles; i++) { + // create a new file with a unique name to avoid conflicts + String fileName = outputPath + "/file" + UUID.randomUUID() + ".txt"; + File file = new File(fileName); + + try { + // write 100 random characters to the file + file.createNewFile(); + FileWriter writer = new FileWriter(file); + for (int j = 0; j < 100; j++) { + char randomChar = (char) (random.nextInt(26) + 'a'); + writer.write(randomChar); + } + writer.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + // delete files if the number of existing files is greater than the required number + else if (existingFilesCount > numberOfFiles) { + while (existingFilesCount > numberOfFiles) { + int fileIndex = random.nextInt(existingFilesCount); + File fileToDelete = existingFiles[fileIndex]; + if (fileToDelete.delete()) { + existingFilesCount--; + } + } + } + } +} \ No newline at end of file diff --git a/java/com/engflow/varyinginputs/writer/WriterTest.java b/java/com/engflow/varyinginputs/writer/WriterTest.java new file mode 100644 index 00000000..3d692139 --- /dev/null +++ b/java/com/engflow/varyinginputs/writer/WriterTest.java @@ -0,0 +1,66 @@ +package com.engflow.varyinginputs.writer; + +import org.junit.Test; +import java.io.File; +import java.io.IOException; +import static org.junit.Assert.assertEquals; + +public class WriterTest { + + @Test + public void testWriteFilesCreatesCorrectNumberOfFiles() throws IOException { + Writer writer = new Writer(); + String outputPath = "test_output"; + int numberOfFiles = 5; + + // Clean up before test + File directory = new File(outputPath); + if (directory.exists()) { + for (File file : directory.listFiles()) { + file.delete(); + } + directory.delete(); + } + + // Run the method + writer.writeFiles(numberOfFiles, outputPath); + + // Verify the number of files created + File[] files = new File(outputPath).listFiles(); + assertEquals(numberOfFiles, files.length); + + // Clean up after test + for (File file : files) { + file.delete(); + } + new File(outputPath).delete(); + } + + @Test + public void testWriteFilesDeletesExcessFiles() throws IOException { + Writer writer = new Writer(); + String outputPath = "test_output"; + int initialNumberOfFiles = 10; + int finalNumberOfFiles = 5; + + // Create initial files + File directory = new File(outputPath); + directory.mkdirs(); + for (int i = 0; i < initialNumberOfFiles; i++) { + new File(outputPath + "/file" + i + ".txt").createNewFile(); + } + + // Run the method + writer.writeFiles(finalNumberOfFiles, outputPath); + + // Verify the number of files after deletion + File[] files = new File(outputPath).listFiles(); + assertEquals(finalNumberOfFiles, files.length); + + // Clean up after test + for (File file : files) { + file.delete(); + } + new File(outputPath).delete(); + } +} \ No newline at end of file From ecaaf31d7f798555610ec24f9cc8808d003fdd6f Mon Sep 17 00:00:00 2001 From: Huertas Cadavid Nicolas Fernando <98675931+NicolasHuertas@users.noreply.github.com> Date: Mon, 9 Dec 2024 15:38:36 -0500 Subject: [PATCH 2/6] Update README.md --- java/com/engflow/varyinginputs/README.md | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/java/com/engflow/varyinginputs/README.md b/java/com/engflow/varyinginputs/README.md index deea7ac1..89059325 100644 --- a/java/com/engflow/varyinginputs/README.md +++ b/java/com/engflow/varyinginputs/README.md @@ -1,16 +1,5 @@ # Varying Inputs Example -## Overview - -The goal of this example project is to test the performance of Engflow's remote execution and caching service for different input sizes. The project involves creating a specified number of txt files, each containing 100 random characters, using the `Writer` class, and then reading and printing out their contents with the `Reader` class. - -## Project Structure - -- `java/com/engflow/varyinginputs/input`: Directory where the generated `.txt` files are saved. -- `java/com/engflow/varyinginputs/main`: Contains the `Main` class which orchestrates the file creation and reading process. -- `java/com/engflow/varyinginputs/reader`: Contains the `Reader` class responsible for reading the files. -- `java/com/engflow/varyinginputs/writer`: Contains the `Writer` class responsible for writing the files. - ## Usage To run the project and specify the number of files to be created, use the following command: @@ -31,4 +20,4 @@ bazel run //java/com/engflow/varyinginputs/main -- 10 This command will: 1. Use the `Writer` class to create 10 files, each containing 100 random characters, in the `input` directory. -2. Use the `Reader` class to read and print the contents of these files. \ No newline at end of file +2. Use the `Reader` class to read and print the contents of these files. From 3361c86d5b033202f2c6e595aa8d92ac9afe8713 Mon Sep 17 00:00:00 2001 From: Huertas Cadavid Nicolas Fernando <98675931+NicolasHuertas@users.noreply.github.com> Date: Mon, 9 Dec 2024 15:39:02 -0500 Subject: [PATCH 3/6] Update BUILD --- java/com/engflow/varyinginputs/input/BUILD | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/com/engflow/varyinginputs/input/BUILD b/java/com/engflow/varyinginputs/input/BUILD index 4b9e382f..cfe5525a 100644 --- a/java/com/engflow/varyinginputs/input/BUILD +++ b/java/com/engflow/varyinginputs/input/BUILD @@ -2,4 +2,4 @@ filegroup( name = "input", srcs = glob(["*.txt"]), visibility = ["//visibility:public"], -) \ No newline at end of file +) From b644a4b5295598668ecc899180d3111b6be567a6 Mon Sep 17 00:00:00 2001 From: Huertas Cadavid Nicolas Fernando <98675931+NicolasHuertas@users.noreply.github.com> Date: Mon, 9 Dec 2024 15:39:20 -0500 Subject: [PATCH 4/6] Update BUILD --- java/com/engflow/varyinginputs/main/BUILD | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/com/engflow/varyinginputs/main/BUILD b/java/com/engflow/varyinginputs/main/BUILD index f5302b9e..1fabb81a 100644 --- a/java/com/engflow/varyinginputs/main/BUILD +++ b/java/com/engflow/varyinginputs/main/BUILD @@ -11,4 +11,4 @@ java_binary( "//java/com/engflow/varyinginputs/input:input", ], main_class = "com.engflow.varyinginputs.main.Main", -) \ No newline at end of file +) From 5ee320dd495e7057c113789de4a37cf89c09477f Mon Sep 17 00:00:00 2001 From: NicolasHuertas Date: Mon, 9 Dec 2024 15:41:33 -0500 Subject: [PATCH 5/6] added line at the end of every file in varyinginputs --- .bazelrc | 9 +++++++++ java/com/engflow/varyinginputs/input/BUILD | 2 +- java/com/engflow/varyinginputs/main/BUILD | 2 +- java/com/engflow/varyinginputs/main/Main.java | 2 +- java/com/engflow/varyinginputs/reader/BUILD | 2 +- java/com/engflow/varyinginputs/reader/Reader.java | 2 +- java/com/engflow/varyinginputs/reader/ReaderTest.java | 2 +- 7 files changed, 15 insertions(+), 6 deletions(-) diff --git a/.bazelrc b/.bazelrc index beb0ba4a..28847f43 100644 --- a/.bazelrc +++ b/.bazelrc @@ -87,3 +87,12 @@ build:magnesite_bes --bes_results_url=https://magnesite.cluster.engflow.com/invo # You can obtain an mTLS certificate by visiting the cluster's "Getting Started" # page, after logging in. try-import .bazelrc.user + +# EngFlow Remote caching +build:engflow-rc --remote_cache=grpc://127.0.0.1:8080 +# EngFlow BES forwarding +build:engflow-bes --bes_backend=grpc://127.0.0.1:8080 +build:engflow-bes --bes_results_url=http://127.0.0.1:8080/invocation/ +# EngFlow Remote caching and BES forwarding +build:engflow --config=engflow-rc +build:engflow --config=engflow-bes diff --git a/java/com/engflow/varyinginputs/input/BUILD b/java/com/engflow/varyinginputs/input/BUILD index 4b9e382f..cfe5525a 100644 --- a/java/com/engflow/varyinginputs/input/BUILD +++ b/java/com/engflow/varyinginputs/input/BUILD @@ -2,4 +2,4 @@ filegroup( name = "input", srcs = glob(["*.txt"]), visibility = ["//visibility:public"], -) \ No newline at end of file +) diff --git a/java/com/engflow/varyinginputs/main/BUILD b/java/com/engflow/varyinginputs/main/BUILD index f5302b9e..1fabb81a 100644 --- a/java/com/engflow/varyinginputs/main/BUILD +++ b/java/com/engflow/varyinginputs/main/BUILD @@ -11,4 +11,4 @@ java_binary( "//java/com/engflow/varyinginputs/input:input", ], main_class = "com.engflow.varyinginputs.main.Main", -) \ No newline at end of file +) diff --git a/java/com/engflow/varyinginputs/main/Main.java b/java/com/engflow/varyinginputs/main/Main.java index b8d44e86..e7073c8a 100644 --- a/java/com/engflow/varyinginputs/main/Main.java +++ b/java/com/engflow/varyinginputs/main/Main.java @@ -27,4 +27,4 @@ public static void main(String[] args) { writer.writeFiles(numberOfFiles, filePath); reader.readFiles(filePath); } -} \ No newline at end of file +} diff --git a/java/com/engflow/varyinginputs/reader/BUILD b/java/com/engflow/varyinginputs/reader/BUILD index 4033aea4..4d4843c4 100644 --- a/java/com/engflow/varyinginputs/reader/BUILD +++ b/java/com/engflow/varyinginputs/reader/BUILD @@ -11,4 +11,4 @@ java_test( deps = [ ":reader", ], -) \ No newline at end of file +) diff --git a/java/com/engflow/varyinginputs/reader/Reader.java b/java/com/engflow/varyinginputs/reader/Reader.java index 7d106f2c..9c889250 100644 --- a/java/com/engflow/varyinginputs/reader/Reader.java +++ b/java/com/engflow/varyinginputs/reader/Reader.java @@ -42,4 +42,4 @@ public void readFiles(String inputPath) { } } } -} \ No newline at end of file +} diff --git a/java/com/engflow/varyinginputs/reader/ReaderTest.java b/java/com/engflow/varyinginputs/reader/ReaderTest.java index a303c364..e28c0305 100644 --- a/java/com/engflow/varyinginputs/reader/ReaderTest.java +++ b/java/com/engflow/varyinginputs/reader/ReaderTest.java @@ -62,4 +62,4 @@ public void testReadFilesHandlesEmptyDirectory() { // Clean up after test directory.delete(); } -} \ No newline at end of file +} From fb3eb2830bd208e9d787913dd8add80bf418e838 Mon Sep 17 00:00:00 2001 From: NicolasHuertas Date: Mon, 9 Dec 2024 15:44:38 -0500 Subject: [PATCH 6/6] added line at the end of files in varyinginputs --- java/com/engflow/varyinginputs/writer/BUILD | 2 +- java/com/engflow/varyinginputs/writer/Writer.java | 2 +- java/com/engflow/varyinginputs/writer/WriterTest.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/java/com/engflow/varyinginputs/writer/BUILD b/java/com/engflow/varyinginputs/writer/BUILD index 1fc02ea5..1ad9695a 100644 --- a/java/com/engflow/varyinginputs/writer/BUILD +++ b/java/com/engflow/varyinginputs/writer/BUILD @@ -11,4 +11,4 @@ java_test( deps = [ ":writer", ], -) \ No newline at end of file +) diff --git a/java/com/engflow/varyinginputs/writer/Writer.java b/java/com/engflow/varyinginputs/writer/Writer.java index 5d911ecc..82608598 100644 --- a/java/com/engflow/varyinginputs/writer/Writer.java +++ b/java/com/engflow/varyinginputs/writer/Writer.java @@ -58,4 +58,4 @@ else if (existingFilesCount > numberOfFiles) { } } } -} \ No newline at end of file +} diff --git a/java/com/engflow/varyinginputs/writer/WriterTest.java b/java/com/engflow/varyinginputs/writer/WriterTest.java index 3d692139..5cf96b0c 100644 --- a/java/com/engflow/varyinginputs/writer/WriterTest.java +++ b/java/com/engflow/varyinginputs/writer/WriterTest.java @@ -63,4 +63,4 @@ public void testWriteFilesDeletesExcessFiles() throws IOException { } new File(outputPath).delete(); } -} \ No newline at end of file +}