Skip to content

Commit

Permalink
CDE-381-cas-de-fichier-avec-header-incorrect-non-bloque :
Browse files Browse the repository at this point in the history
     - ajout d'un contrôle et modification d'un contrôle dans la méthode detectHeaderPresence() (CheckFiles.java)
     - adaptation des TU
  • Loading branch information
EryneKL committed Feb 29, 2024
1 parent 2880834 commit 0c6076f
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ public void run(String... args) throws IOException {
}
long endTime = System.currentTimeMillis();
double executionTime = (double) (endTime - startTime) / 1000;
log.info("Temps d'exécution : " + executionTime + " secondes");
log.debug("Temps d'exécution : " + executionTime + " secondes");
}

private void checkExistingPackage(String filename) throws IllegalProviderException, IllegalPackageException, IllegalDateException {
Expand Down
7 changes: 6 additions & 1 deletion src/main/java/fr/abes/kbart2kafka/utils/CheckFiles.java
Original file line number Diff line number Diff line change
Expand Up @@ -76,10 +76,15 @@ public static void detectTabulations(File file) throws IOException, IllegalFileF
public static void detectHeaderPresence(String header, File file, Boolean isBypassOptionPresent) throws IOException, IllegalFileFormatException {
try (BufferedReader reader = new BufferedReader(new FileReader(file))) {
String line = reader.readLine();
String[] headerKbart = line.split("\t");

if(isBypassOptionPresent && line.contains("best_ppn")) {
log.error("Message envoyé : {}", "L'en tete du fichier est incorrecte.");
throw new IllegalFileFormatException("L'en tete du fichier est incorrecte. L'option _BYPASS n'est pas compatible avec la présence d'une colonne best_pnn.");
} else if(!line.contains(header)) {
} else if(headerKbart.length == 25 && !line.contains(header)) {
log.error("Message envoyé : {}", "L'en tete du fichier est incorrecte.");
throw new IllegalFileFormatException("L'en tete du fichier est incorrecte.");
} else if(headerKbart.length == 26 && !line.contains("best_ppn")) {
log.error("Message envoyé : {}", "L'en tete du fichier est incorrecte.");
throw new IllegalFileFormatException("L'en tete du fichier est incorrecte.");
}
Expand Down
25 changes: 20 additions & 5 deletions src/test/java/fr/abes/kbart2kafka/utils/CheckFilesTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,14 @@
class CheckFilesTest {

File file;
File file1;
File file2;
File file3;

@AfterEach
public void cleanUp() {
if(file != null && file.delete()){file.deleteOnExit();} // ne pas supprimer. Indispensable pour que les TU fonctionnent.
if(file1 != null && file1.delete()){file1.deleteOnExit();} // ne pas supprimer. Indispensable pour que les TU fonctionnent.
if(file2 != null && file2.delete()){file2.deleteOnExit();} // ne pas supprimer. Indispensable pour que les TU fonctionnent.
if(file3 != null && file3.delete()){file3.deleteOnExit();} // ne pas supprimer. Indispensable pour que les TU fonctionnent.
}
Expand Down Expand Up @@ -84,13 +86,26 @@ void detectTabulations() throws IOException, IllegalFileFormatException {
@Test
void detectOfHeaderPresence() throws IOException, IllegalFileFormatException {
this.file = new File("test.tsv");
FileUtils.writeStringToFile(file, "test\ttest\ttest", StandardCharsets.UTF_8, true);
CheckFiles.detectHeaderPresence("test", file, false);
FileUtils.writeStringToFile(file, "testA\ttestB\ttestC\ttestD\ttestE\ttestF\ttestG\ttestH\ttestI\ttestJ\ttestK\ttestL\ttestM\ttestN\ttestO\ttestP\ttestQ\ttestR\ttestS\ttestT\ttestU\ttestV\ttestX\ttestY\ttestZ", StandardCharsets.UTF_8, true);
CheckFiles.detectHeaderPresence("testA\ttestB\ttestC\ttestD\ttestE\ttestF\ttestG\ttestH\ttestI\ttestJ\ttestK\ttestL\ttestM\ttestN\ttestO\ttestP\ttestQ\ttestR\ttestS\ttestT\ttestU\ttestV\ttestX\ttestY\ttestZ", file, false);

// Test d'une erreur sur le header avec bestPpn est option byPass
this.file1 = new File("test1.tsv");
FileUtils.writeStringToFile(file1, "testA\ttestB\ttestC\ttestD\ttestE\ttestF\ttestG\ttestH\ttestI\ttestJ\ttestK\ttestL\ttestM\ttestN\ttestO\ttestP\ttestQ\ttestR\ttestS\ttestT\ttestU\ttestV\ttestX\ttestY\ttestZ\tbest_ppn", StandardCharsets.UTF_8, true);
IllegalFileFormatException erreur1 = Assertions.assertThrows(IllegalFileFormatException.class, () -> CheckFiles.detectHeaderPresence("testAAA\ttestB\ttestC\ttestD\ttestE\ttestF\ttestG\ttestH\ttestI\ttestJ\ttestK\ttestL\ttestM\ttestN\ttestO\ttestP\ttestQ\ttestR\ttestS\ttestT\ttestU\ttestV\ttestX\ttestY\ttestZ\tbest_ppn", file1, true));
Assertions.assertEquals("L'en tete du fichier est incorrecte. L'option _BYPASS n'est pas compatible avec la présence d'une colonne best_pnn.", erreur1.getMessage());

// Test d'une erreur sur le header à 25 colonnes
this.file2 = new File("test2.tsv");
FileUtils.writeStringToFile(file2, "toto\ttata\ttiti", StandardCharsets.UTF_8, true);
IllegalFileFormatException erreur = Assertions.assertThrows(IllegalFileFormatException.class, () -> CheckFiles.detectHeaderPresence("test", file2, false));
Assertions.assertEquals("L'en tete du fichier est incorrecte.", erreur.getMessage());
FileUtils.writeStringToFile(file2, "testA\ttestB\ttestC\ttestD\ttestE\ttestF\ttestG\ttestH\ttestI\ttestJ\ttestK\ttestL\ttestM\ttestN\ttestO\ttestP\ttestQ\ttestR\ttestS\ttestT\ttestU\ttestV\ttestX\ttestY\ttestZ", StandardCharsets.UTF_8, true);
IllegalFileFormatException erreur2 = Assertions.assertThrows(IllegalFileFormatException.class, () -> CheckFiles.detectHeaderPresence("testAAA\ttestB\ttestC\ttestD\ttestE\ttestF\ttestG\ttestH\ttestI\ttestJ\ttestK\ttestL\ttestM\ttestN\ttestO\ttestP\ttestQ\ttestR\ttestS\ttestT\ttestU\ttestV\ttestX\ttestY\ttestZ", file2, false));
Assertions.assertEquals("L'en tete du fichier est incorrecte.", erreur2.getMessage());

// Test d'une erreur sur le header à 26 colonnes avec une colonne bestPpn
this.file3 = new File("test3.tsv");
FileUtils.writeStringToFile(file3, "testA\ttestB\ttestC\ttestD\ttestE\ttestF\ttestG\ttestH\ttestI\ttestJ\ttestK\ttestL\ttestM\ttestN\ttestO\ttestP\ttestQ\ttestR\ttestS\ttestT\ttestU\ttestV\ttestX\ttestY\ttestZ\ttestZZZ", StandardCharsets.UTF_8, true);
IllegalFileFormatException erreur3 = Assertions.assertThrows(IllegalFileFormatException.class, () -> CheckFiles.detectHeaderPresence("testAAA\ttestB\ttestC\ttestD\ttestE\ttestF\ttestG\ttestH\ttestI\ttestJ\ttestK\ttestL\ttestM\ttestN\ttestO\ttestP\ttestQ\ttestR\ttestS\ttestT\ttestU\ttestV\ttestX\ttestY\ttestZ\best_ppn", file3, false));
Assertions.assertEquals("L'en tete du fichier est incorrecte.", erreur3.getMessage());
}

@Test
Expand Down

0 comments on commit 0c6076f

Please sign in to comment.