From 8d37df695b78a122cb00bae26d058d7b53430e7b Mon Sep 17 00:00:00 2001 From: pierre-maraval Date: Tue, 23 Apr 2024 12:05:26 +0200 Subject: [PATCH 1/3] =?UTF-8?q?Fix=20:=20Mise=20=C3=A0=20jour=20version=20?= =?UTF-8?q?accesCbs,=20prise=20en=20compte=20des=20erreurs=20de=20communic?= =?UTF-8?q?ation=20avec=20le=20cbs=20via=20syst=C3=A8me=20de=20retry?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 7 +- .../kafkatosudoc/kafka/KbartListener.java | 232 ++++++++++++------ .../kafkatosudoc/service/SudocService.java | 78 ++++-- 3 files changed, 225 insertions(+), 92 deletions(-) diff --git a/pom.xml b/pom.xml index aa8df58..ab6ece8 100644 --- a/pom.xml +++ b/pom.xml @@ -110,6 +110,11 @@ org.springframework.kafka spring-kafka + + + org.springframework.retry + spring-retry + @@ -182,7 +187,7 @@ fr.abes.api-communes AccesCbs - 2.5.48 + 2.5.62 compile diff --git a/src/main/java/fr/abes/kafkatosudoc/kafka/KbartListener.java b/src/main/java/fr/abes/kafkatosudoc/kafka/KbartListener.java index 86967ef..9e47171 100644 --- a/src/main/java/fr/abes/kafkatosudoc/kafka/KbartListener.java +++ b/src/main/java/fr/abes/kafkatosudoc/kafka/KbartListener.java @@ -22,6 +22,8 @@ import org.apache.kafka.clients.consumer.ConsumerRecord; import org.springframework.beans.factory.annotation.Value; import org.springframework.kafka.annotation.KafkaListener; +import org.springframework.retry.annotation.Backoff; +import org.springframework.retry.annotation.Retryable; import org.springframework.stereotype.Service; import java.io.IOException; @@ -78,7 +80,7 @@ public void listenKbartToCreateFromKafka(ConsumerRecord()); + this.workInProgressMap.put(lignesKbart.key(), new WorkInProgress<>()); if (lignesKbart.value().getBESTPPN() != null && !lignesKbart.value().getBESTPPN().isEmpty()) { //on alimente la liste des notices d'un package qui sera traitée intégralement @@ -113,8 +115,7 @@ private void traiterPackageDansSudoc(List listeNotices, Strin packageKbartDto = new PackageKbartDto(packageName, dateFromFile, provider); ProviderPackage lastPackage = baconService.findLastVersionOfPackage(packageKbartDto); - service.authenticate(serveurSudoc, portSudoc, loginSudoc, passwordSudoc); - String ppnNoticeBouquet = service.getNoticeBouquet(packageKbartDto.getProvider(), packageKbartDto.getPackageName()); + String ppnNoticeBouquet = getNoticeBouquet(service, provider, packageName); //cas ou on a une version antérieure de package Set ppnLastVersion = new HashSet<>(); if (lastPackage != null) { @@ -159,7 +160,8 @@ private void traiterPackageDansSudoc(List listeNotices, Strin suppression469(ppnNoticeBouquet, ppn, mapper.map(listPpnsFromListeNotices.get(0), LigneKbartConnect.class), filename, service); } } - } catch (CBSException e) { + } catch (CBSException | IOException e) { + //erreur à l'authentification log.error(e.getMessage(), e.getCause()); this.workInProgressMap.get(filename).addErrorMessagesConnectionCbs("Erreur : " + e.getMessage()); } catch (IllegalDateException e) { @@ -174,7 +176,27 @@ private void traiterPackageDansSudoc(List listeNotices, Strin } } - private void ajout469(String ppnNoticeBouquet, String ppn, LigneKbartConnect ligneKbart, String filename, SudocService service) { + + @Retryable(maxAttempts = 4, retryFor = IOException.class, noRetryFor = CBSException.class, backoff = @Backoff(delay = 1000, multiplier = 2)) + private String getNoticeBouquet(SudocService service, String provider, String packageName) throws CBSException, IOException { + try { + service.authenticate(serveurSudoc, portSudoc, loginSudoc, passwordSudoc); + return service.getNoticeBouquet(provider, packageName); + } catch (IOException e) { + //cas d'une erreur de communication avec le Sudoc, on se relogge au cbs, et on retry la méthode + try { + log.debug("erreur de communication avec le Sudoc, tentative de reconnexion"); + service.disconnect(); + service.authenticate(serveurSudoc, portSudoc, loginSudoc, passwordSudoc); + } catch (CBSException ex) { + log.error(ex.getMessage()); + } + throw e; + } + } + + @Retryable(maxAttempts = 4, retryFor = IOException.class, backoff = @Backoff(delay = 1000, multiplier = 2)) + private void ajout469(String ppnNoticeBouquet, String ppn, LigneKbartConnect ligneKbart, String filename, SudocService service) throws IOException { log.debug(ligneKbart.toString()); NoticeConcrete notice = null; try { @@ -186,16 +208,27 @@ private void ajout469(String ppnNoticeBouquet, String ppn, LigneKbartConnect lig log.debug("Ajout 469 : Notice " + notice.getNoticeBiblio().findZone("003", 0).getValeur() + " modifiée avec succès"); } } else { - this.workInProgressMap.get(filename).addErrorMessages469(ppn, ligneKbart, "","Impossible de trouver la notice", ERROR_TYPE.ADD469); + this.workInProgressMap.get(filename).addErrorMessages469(ppn, ligneKbart, "", "Impossible de trouver la notice", ERROR_TYPE.ADD469); } } catch (CBSException | ZoneException e) { String message = "PPN : " + ppn + " : " + e.getMessage(); log.error(message, e.getCause()); this.workInProgressMap.get(filename).addErrorMessages469(ppn, ligneKbart, notice != null ? notice.getNoticeBiblio().toString() : "Impossible d'accéder à la notice", e.getMessage(), ERROR_TYPE.ADD469); + } catch (IOException e) { + //cas d'une erreur de communication avec le Sudoc, on se relogge au cbs, et on retry la méthode + try { + log.debug("erreur de communication avec le Sudoc, tentative de reconnexion"); + service.disconnect(); + service.authenticate(serveurSudoc, portSudoc, loginSudoc, passwordSudoc); + } catch (CBSException ex) { + log.error(ex.getMessage()); + } + throw e; } } - private void suppression469(String ppnNoticeBouquet, String ppn, LigneKbartConnect ligneKbart, String filename, SudocService service) { + @Retryable(maxAttempts = 4, retryFor = IOException.class, backoff = @Backoff(delay = 1000, multiplier = 2)) + private void suppression469(String ppnNoticeBouquet, String ppn, LigneKbartConnect ligneKbart, String filename, SudocService service) throws IOException { NoticeConcrete notice = null; try { notice = service.getNoticeFromPpn(ppn); @@ -206,12 +239,21 @@ private void suppression469(String ppnNoticeBouquet, String ppn, LigneKbartConne log.debug("Suppression 469 : Notice " + notice.getNoticeBiblio().findZone("003", 0).getValeur() + " modifiée avec succès"); } } else { - this.workInProgressMap.get(filename).addErrorMessages469(ppn, ligneKbart, "","Impossible de trouver la notice", ERROR_TYPE.SUPP469); + this.workInProgressMap.get(filename).addErrorMessages469(ppn, ligneKbart, "", "Impossible de trouver la notice", ERROR_TYPE.SUPP469); } } catch (CBSException | ZoneException e) { String message = "PPN : " + ppn + " : " + e.getMessage(); log.error(message, e.getCause()); this.workInProgressMap.get(filename).addErrorMessages469(ppn, ligneKbart, notice != null ? notice.getNoticeBiblio().toString() : "Impossible d'accéder à la notice", e.getMessage(), ERROR_TYPE.SUPP469); + } catch (IOException e) { + //cas d'une erreur de communication avec le Sudoc, on se relogge au cbs, et on retry la méthode + try { + service.disconnect(); + service.authenticate(serveurSudoc, portSudoc, loginSudoc, passwordSudoc); + } catch (CBSException ex) { + log.error(ex.getMessage()); + } + throw e; } } @@ -227,30 +269,7 @@ public void listenKbartToDeleteFromKafka(ConsumerRecord p SudocService service = new SudocService(); List listError = new ArrayList<>(); try { - service.authenticate(serveurSudoc, portSudoc, loginSudoc, passwordSudoc); - //recherche de la notice bouquet - String ppnNoticeBouquet = service.getNoticeBouquet(provider, packageName); - //affichage des notices liées - //boucle sur les notices liées à partir de la seconde (la première étant la notice bouquet elle-même) - int nbNoticesLiees = service.getNoticesLiees(); - for (int i = 2; i <= nbNoticesLiees; i++) { - String ppnCourant = ""; - try { - service.voirNotice(i); - NoticeConcrete notice = service.passageEditionNotice(i); - ppnCourant = notice.getNoticeBiblio().findZone("003", 0).getValeur(); - log.debug(ppnCourant); - if (service.isNoticeBouquetInPpn(notice.getNoticeBiblio(), ppnNoticeBouquet)) { - service.supprimeNoticeBouquetInPpn(notice.getNoticeBiblio(), ppnNoticeBouquet); - service.modifierNotice(notice, i); - log.debug("Suppression 469 : Notice " + notice.getNoticeBiblio().findZones("003").get(0).getValeur() + " modifiée avec succès"); - } - } catch (CBSException | ZoneException e) { - log.error(e.getMessage(), e.getCause()); - listError.add("Notice bouquet " + ppnNoticeBouquet + " - notice " + ppnCourant + " erreur : " + e.getMessage()); - service.retourArriere(); - } - } + traiterNoticesADelier(service, provider, packageName, listError); if (!listError.isEmpty()) { listError.add(0, listError.size() + " erreur(s) lors de la suppression de lien(s) vers une notice bouquet : " + System.lineSeparator()); emailService.sendErrorMailProviderPackageDeleted(listError, provider + "_" + packageName); @@ -267,13 +286,51 @@ public void listenKbartToDeleteFromKafka(ConsumerRecord p log.warn("Erreur de déconnexion du Sudoc"); } } + } + + private void traiterNoticesADelier(SudocService service, String provider, String packageName, List listError) throws CBSException, IOException { + String ppnNoticeBouquet = getNoticeBouquet(service, provider, packageName); + //affichage des notices liées + //boucle sur les notices liées à partir de la seconde (la première étant la notice bouquet elle-même) + int nbNoticesLiees = service.getNoticesLiees(); + for (int i = 2; i <= nbNoticesLiees; i++) { + suppressionLien469(service, listError, i, ppnNoticeBouquet); + } + } + @Retryable(maxAttempts = 4, retryFor = IOException.class, noRetryFor = {CBSException.class}, backoff = @Backoff(delay = 1000, multiplier = 2)) + private void suppressionLien469(SudocService service, List listError, int i, String ppnNoticeBouquet) throws IOException, CBSException { + String ppnCourant = ""; + try { + service.voirNotice(i); + NoticeConcrete notice = service.passageEditionNotice(i); + ppnCourant = notice.getNoticeBiblio().findZone("003", 0).getValeur(); + log.debug(ppnCourant); + if (service.isNoticeBouquetInPpn(notice.getNoticeBiblio(), ppnNoticeBouquet)) { + service.supprimeNoticeBouquetInPpn(notice.getNoticeBiblio(), ppnNoticeBouquet); + service.modifierNotice(notice, i); + log.debug("Suppression 469 : Notice " + notice.getNoticeBiblio().findZones("003").get(0).getValeur() + " modifiée avec succès"); + } + } catch (CBSException | ZoneException e) { + log.error(e.getMessage(), e.getCause()); + listError.add("Notice bouquet " + ppnNoticeBouquet + " - notice " + ppnCourant + " erreur : " + e.getMessage()); + service.retourArriere(); + } catch (IOException e) { + //cas d'une erreur de communication avec le Sudoc, on se relogge au cbs, et on retry la méthode + try { + log.debug("erreur de communication avec le Sudoc, tentative de reconnexion"); + service.disconnect(); + service.authenticate(serveurSudoc, portSudoc, loginSudoc, passwordSudoc); + } catch (CBSException ex) { + log.error(ex.getMessage()); + } + throw e; + } } /** * @param ligneKbart : enregistrement dans Kafka - **/ - + */ @KafkaListener(topics = {"${topic.name.source.kbart.exnihilo}"}, groupId = "${topic.groupid.source.exnihilo}", containerFactory = "kafkaKbartListenerContainerFactory") public void listenKbartFromKafkaExNihilo(ConsumerRecord ligneKbart) { log.debug("Entrée dans création ex nihilo"); @@ -301,22 +358,13 @@ public void listenKbartFromKafkaExNihilo(ConsumerRecord zones214 = noticeElec.getNoticeBiblio().findZones("214").stream().filter(zone -> Arrays.toString(zone.getIndicateurs()).equals("[#, 2]")).toList(); - for (Zone zone : zones214) - zone.addSubLabel("c", providerDisplay); - } - service.addLibelleNoticeBouquetInPpn(noticeElec.getNoticeBiblio(), provider + "_" + packageName); - service.creerNotice(noticeElec); - log.debug("Création notice à partir de l'imprimée terminée"); + noticeElec = creerNoticeAPartirImprime(ligneKbartImprime, provider, packageName, service); } } } catch (CBSException | ZoneException e) { log.error(e.getMessage()); - this.workInProgressMapImprime.get(filename).addErrorMessagesImprime(ppn, noticeElec != null ? noticeElec.getNoticeBiblio().toString() : "pas de notice trouvée", e.getMessage()); + this.workInProgressMapImprime.get(filename).addErrorMessagesImprime(lignesKbart.value().getPpn().toString(), noticeElec != null ? noticeElec.getNoticeBiblio().toString() : "pas de notice trouvée", e.getMessage()); + } catch (IOException e) { + //cas d'une erreur de communication avec le Sudoc, on se relogge au cbs, et on retry la méthode + try { + log.debug("erreur de communication avec le Sudoc, tentative de reconnexion"); + service.disconnect(); + service.authenticate(serveurSudoc, portSudoc, loginSudoc, passwordSudoc); + } catch (CBSException | IOException ex) { + log.error(ex.getMessage()); + } } finally { try { // On déconnecte du Sudoc, on envoie les messages d'erreurs s'il y a des erreurs et on supprime le WorkInProgress @@ -402,13 +466,43 @@ public void listenKbartFromKafkaImprime(ConsumerRecord zones214 = noticeElec.getNoticeBiblio().findZones("214").stream().filter(zone -> Arrays.toString(zone.getIndicateurs()).equals("[#, 2]")).toList(); + for (Zone zone : zones214) + zone.addSubLabel("c", providerDisplay); + } + service.addLibelleNoticeBouquetInPpn(noticeElec.getNoticeBiblio(), provider + "_" + packageName); + service.creerNotice(noticeElec); + log.debug("Création notice à partir de l'imprimée terminée"); + return noticeElec; + } catch (IOException e) { + //cas d'une erreur de communication avec le Sudoc, on se relogge au cbs, et on retry la méthode + try { + log.debug("erreur de communication avec le Sudoc, tentative de reconnexion"); + service.disconnect(); + service.authenticate(serveurSudoc, portSudoc, loginSudoc, passwordSudoc); + } catch (CBSException | IOException ex) { + log.error(ex.getMessage()); + } + throw e; + } + } } diff --git a/src/main/java/fr/abes/kafkatosudoc/service/SudocService.java b/src/main/java/fr/abes/kafkatosudoc/service/SudocService.java index d530e43..903b3fe 100644 --- a/src/main/java/fr/abes/kafkatosudoc/service/SudocService.java +++ b/src/main/java/fr/abes/kafkatosudoc/service/SudocService.java @@ -6,10 +6,15 @@ import fr.abes.cbs.notices.NoticeConcrete; import fr.abes.cbs.process.ProcessCBS; import lombok.extern.slf4j.Slf4j; +import org.apache.logging.log4j.Level; +import org.springframework.retry.annotation.Backoff; +import org.springframework.retry.annotation.Retryable; + +import java.io.IOException; @Slf4j public class SudocService { - private ProcessCBS cbs; + private final ProcessCBS cbs; public SudocService() { this.cbs = new ProcessCBS(); @@ -22,17 +27,46 @@ public SudocService(ProcessCBS cbs) { /** * méthode d'authentification au Sudoc : on vérifie avant qu'une connexion n'est pas déjà établie - * + * @param serveurSudoc nom du serveur + * @param portSudoc port de connexion + * @param loginSudoc login d'authentification + * @param passwordSudoc mot de passe * @throws CBSException erreur d'authentification + * @throws IOException erreur de communication avec le CBS */ - public void authenticate(String serveurSudoc, String portSudoc, String loginSudoc, String passwordSudoc) throws CBSException { - if (!isLogged()) - this.cbs.authenticate(serveurSudoc, portSudoc, loginSudoc, passwordSudoc); + @Retryable(maxAttempts = 4, retryFor = IOException.class, noRetryFor = {CBSException.class}, backoff = @Backoff(delay = 1000, multiplier = 2) ) + public void authenticate(String serveurSudoc, String portSudoc, String loginSudoc, String passwordSudoc) throws CBSException, IOException { + if (isNotLogged()) + try { + this.cbs.authenticate(serveurSudoc, portSudoc, loginSudoc, passwordSudoc); + } catch (IOException ex) { + this.cbs.disconnect(); + this.cbs.authenticate(serveurSudoc, portSudoc, loginSudoc, passwordSudoc); + throw ex; + } } - public void authenticateBaseSignal(String serveurSudoc, String portSudoc, String loginSudoc, String passwordSudoc, String signalDB) throws CBSException { - if (!isLogged()) - this.cbs.authenticateWithLogicalDb(serveurSudoc, portSudoc, loginSudoc, passwordSudoc, signalDB); + /** + * Méthode d'authentification sur une base Signal + * @param serveurSudoc nom du serveur + * @param portSudoc port de connexion + * @param loginSudoc login d'authentification + * @param passwordSudoc mot de passe + * @param signalDB numéro de la base signal + * @throws CBSException erreur d'authentification + * @throws IOException erreur de communication avec le CBS + */ + @Retryable(maxAttempts = 4, retryFor = IOException.class, noRetryFor = {CBSException.class}, backoff = @Backoff(delay = 1000, multiplier = 2) ) + public void authenticateBaseSignal(String serveurSudoc, String portSudoc, String loginSudoc, String passwordSudoc, String signalDB) throws CBSException, IOException { + if (isNotLogged()) { + try { + this.cbs.authenticateWithLogicalDb(serveurSudoc, portSudoc, loginSudoc, passwordSudoc, signalDB); + } catch (IOException ex) { + this.cbs.disconnect(); + this.cbs.authenticateWithLogicalDb(serveurSudoc, portSudoc, loginSudoc, passwordSudoc, signalDB); + throw ex; + } + } } /** @@ -40,26 +74,26 @@ public void authenticateBaseSignal(String serveurSudoc, String portSudoc, String * * @return true si authentifié */ - private boolean isLogged() { - return this.cbs.getClientCBS().isLogged(); + private boolean isNotLogged() { + return !this.cbs.getClientCBS().isLogged(); } /** * Méthode récupérant une notice bouquet en fonction d'un nom de package et d'un provider * - * @param provider - * @param packageKbart + * @param provider : nom du provider + * @param packageKbart : nom du package kbart * @return le ppn de la notice récupérée * @throws CBSException erreur dans la recherche de la notice bouquet */ - public String getNoticeBouquet(String provider, String packageKbart) throws CBSException { + public String getNoticeBouquet(String provider, String packageKbart) throws CBSException, IOException { String query = "che bou " + provider + "_" + packageKbart; log.debug("Recherche notice bouquet : " + query); this.cbs.search(query); if (this.cbs.getNbNotices() == 1) { return cbs.getPpnEncours(); } else { - throw new CBSException("V/VERROR", "Provider : " + provider + " / package : " + packageKbart + " : Recherche de la notice bouquet échouée"); + throw new CBSException(Level.WARN, "Provider : " + provider + " / package : " + packageKbart + " : Recherche de la notice bouquet échouée"); } } @@ -71,7 +105,7 @@ public String getNoticeBouquet(String provider, String packageKbart) throws CBSE * @throws CBSException : Aucune notice ne correspondant au ppn * @throws ZoneException : erreur de construction de l'objet NoticeConcrete */ - public NoticeConcrete getNoticeFromPpn(String ppn) throws CBSException, ZoneException { + public NoticeConcrete getNoticeFromPpn(String ppn) throws CBSException, ZoneException, IOException { String query = "che ppn " + ppn; log.debug("Recherche notice : " + query); this.cbs.search(query); @@ -80,7 +114,7 @@ public NoticeConcrete getNoticeFromPpn(String ppn) throws CBSException, ZoneExce notice = cbs.editerNoticeConcrete("1"); this.cbs.back(); } else { - throw new CBSException("V/VERROR", "Aucune notice ne correspond à la recherche sur le PPN " + ppn); + throw new CBSException(Level.WARN, "Aucune notice ne correspond à la recherche sur le PPN " + ppn); } return notice; } @@ -126,7 +160,7 @@ public void addLibelleNoticeBouquetInPpn(Biblio notice, String libelleBouquet) t * @throws ZoneException erreur de construction de la notice * @throws CBSException erreur lors du passage en édition */ - public NoticeConcrete passageEditionNotice(int noNotice) throws ZoneException, CBSException { + public NoticeConcrete passageEditionNotice(int noNotice) throws ZoneException, CBSException, IOException { return cbs.editerNoticeConcrete(String.valueOf(noNotice)); } @@ -137,7 +171,7 @@ public NoticeConcrete passageEditionNotice(int noNotice) throws ZoneException, C * @param noLigne numéro de notice dans le lot récupéré via une recherche antérieure * @throws CBSException erreur de modification de la notice */ - public void modifierNotice(NoticeConcrete notice, int noLigne) throws CBSException { + public void modifierNotice(NoticeConcrete notice, int noLigne) throws CBSException, IOException { this.cbs.modifierNoticeConcrete(String.valueOf(noLigne), notice); } @@ -147,7 +181,7 @@ public void modifierNotice(NoticeConcrete notice, int noLigne) throws CBSExcepti * @param notice notice à créer * @throws CBSException Erreur de création de notice */ - public void creerNotice(NoticeConcrete notice) throws CBSException { + public void creerNotice(NoticeConcrete notice) throws CBSException, IOException { this.cbs.enregistrerNew(notice.toString()); } @@ -171,7 +205,7 @@ public Biblio supprimeNoticeBouquetInPpn(Biblio notice, String ppnNoticeBouquet) * @return le nombre de notices liées * @throws CBSException erreur sur la commande CBS */ - public int getNoticesLiees() throws CBSException { + public int getNoticesLiees() throws CBSException, IOException { return this.cbs.rel(); } @@ -180,7 +214,7 @@ public int getNoticesLiees() throws CBSException { * * @throws CBSException erreur sur la commande CBS */ - public void retourArriere() throws CBSException { + public void retourArriere() throws CBSException, IOException { this.cbs.back(); } @@ -190,7 +224,7 @@ public void retourArriere() throws CBSException { * @param pos la position de la notice dans le lot * @throws CBSException erreur sur la commande CBS */ - public void voirNotice(int pos) throws CBSException { + public void voirNotice(int pos) throws CBSException, IOException { log.debug("passage notice suivante"); this.cbs.view(String.valueOf(pos), false, "UNM"); } From c86fffca8030717d22bb8725383df9066b50d398 Mon Sep 17 00:00:00 2001 From: pierre-maraval Date: Tue, 23 Apr 2024 12:08:00 +0200 Subject: [PATCH 2/3] CDE-410 : Fix TU --- .../kafkatosudoc/service/SudocServiceTest.java | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/test/java/fr/abes/kafkatosudoc/service/SudocServiceTest.java b/src/test/java/fr/abes/kafkatosudoc/service/SudocServiceTest.java index f7feb30..6e4416d 100644 --- a/src/test/java/fr/abes/kafkatosudoc/service/SudocServiceTest.java +++ b/src/test/java/fr/abes/kafkatosudoc/service/SudocServiceTest.java @@ -4,11 +4,14 @@ import fr.abes.cbs.exception.ZoneException; import fr.abes.cbs.notices.Biblio; import fr.abes.cbs.process.ProcessCBS; +import org.apache.logging.log4j.Level; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.mockito.Mockito; +import java.io.IOException; + import static org.junit.jupiter.api.Assertions.assertThrows; class SudocServiceTest { @@ -23,13 +26,13 @@ void init() { } @Test - void getNoticeBouquetException() throws CBSException { - Mockito.when(cbs.search(Mockito.anyString())).thenThrow(new CBSException("V/VERROR", "Erreur Recherche")); - Assertions.assertThrows(CBSException.class, () -> sudocService.getNoticeBouquet("CAIRN", "GLOBAL")); + void getNoticeBouquetException() throws IOException { + Mockito.when(cbs.search(Mockito.anyString())).thenThrow(new IOException("Erreur Recherche")); + Assertions.assertThrows(IOException.class, () -> sudocService.getNoticeBouquet("CAIRN", "GLOBAL")); } @Test - void getNoticeBouquetUneNotice() throws CBSException { + void getNoticeBouquetUneNotice() throws CBSException, IOException { Mockito.when(cbs.search(Mockito.anyString())).thenReturn("test"); Mockito.when(cbs.getNbNotices()).thenReturn(1); Mockito.when(cbs.getPpnEncours()).thenReturn("111111111"); @@ -37,11 +40,11 @@ void getNoticeBouquetUneNotice() throws CBSException { } @Test - void getNoticeBouquetPlusieursNotices() throws CBSException { + void getNoticeBouquetPlusieursNotices() throws IOException { Mockito.when(cbs.search(Mockito.anyString())).thenReturn("test"); Mockito.when(cbs.getNbNotices()).thenReturn(2); CBSException result = assertThrows(CBSException.class, () -> sudocService.getNoticeBouquet("CAIRN", "GLOBAL")); - Assertions.assertEquals("V/VERROR", result.getCodeErreur()); + Assertions.assertEquals(Level.WARN, result.getCodeErreur()); Assertions.assertEquals("Provider : CAIRN / package : GLOBAL : Recherche de la notice bouquet échouée", result.getMessage()); } From 78b8d5b136268f24abf9f2ec77a94cd28e46f02e Mon Sep 17 00:00:00 2001 From: pierre-maraval Date: Wed, 24 Apr 2024 08:20:55 +0200 Subject: [PATCH 3/3] CDE-410 : update accesCbs pour correction sur zones 6XX et 7XX --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index ab6ece8..4043bac 100644 --- a/pom.xml +++ b/pom.xml @@ -187,7 +187,7 @@ fr.abes.api-communes AccesCbs - 2.5.62 + 2.5.63 compile