Capitolo 44. Simulazione dell'integrazione di Red Hat 2023.q2 | Portale clienti Red Hat (2023)

È supportato solo il produttore

Il test dell'elaborazione distribuita e asincrona è notoriamente difficile. ILDeridere,TestESet di datigli endpoint funzionano alla grande con il Camel Testing Framework per semplificare l'utilizzo dei test di unità e integrazioneModelli di integrazione aziendalee la vasta gamma di componenti di Camel insieme alla potente integrazione di fagioli.

Il componente Mock fornisce un potente meccanismo di test dichiarativo, che è simile ajMockin quanto consente di creare aspettative dichiarative su qualsiasi endpoint Mock prima dell'inizio di un test. Quindi viene eseguito il test, che in genere invia messaggi a uno o più endpoint, e infine le aspettative possono essere affermate in un test case per garantire che il sistema funzioni come previsto.

Ciò ti consente di testare varie cose come:

  • Il numero corretto di messaggi viene ricevuto su ciascun endpoint,
  • Vengono ricevuti i payload corretti, nell'ordine corretto,
  • I messaggi arrivano su un endpoint in ordine, utilizzando un'espressione per creare una funzione di test dell'ordine,
  • I messaggi che arrivano corrispondono a qualche tipo di predicato, ad esempio che intestazioni specifiche hanno determinati valori o che i messaggi corrispondono a qualche predicato, ad esempio valutando unXPatOXQueryEspressione.

Nota

C'è anche ilTestare l'endpointche è un endpoint Mock, ma che utilizza un secondo endpoint per fornire l'elenco dei corpi dei messaggi previsti e imposta automaticamente le asserzioni dell'endpoint Mock. In altre parole, è un endpoint Mock che imposta automaticamente le sue asserzioni da alcuni messaggi di esempio in un File oBanca dati, Per esempio.

Nota

Gli endpoint fittizi conservano gli scambi ricevuti in memoria a tempo indeterminato.
Ricorda che Mock è progettato per i test. Quando aggiungi endpoint fittizi a una route, ogni Exchange inviato all'endpoint verrà archiviato (per consentire una successiva convalida) in memoria fino a quando non viene reimpostato in modo esplicito o la JVM viene riavviata. Se stai inviando un volume elevato e/o messaggi di grandi dimensioni, ciò potrebbe causare un uso eccessivo della memoria. Se il tuo obiettivo è testare i percorsi distribuibili in linea, prendi in considerazione l'utilizzo di NotifyBuilder o AdviceWith nei tuoi test invece di aggiungere endpoint fittizi ai percorsi direttamente. Sono disponibili due nuove opzioni retainFirst e retainLast che possono essere utilizzate per limitare il numero di messaggi che gli endpoint Mock conservano in memoria.

44.1.Formattare l'URI

mock:qualcheNome[?opzioni]

DovesomeNamepuò essere qualsiasi stringa che identifica in modo univoco l'endpoint.

44.2.Configurazione delle opzioni

I componenti Camel sono configurati su due livelli separati:

  • livello di componente
  • livello di endpoint

44.2.1.Configurazione delle opzioni del componente

Il livello del componente è il livello più alto che contiene le configurazioni generali e comuni ereditate dagli endpoint. Ad esempio un componente può avere impostazioni di sicurezza, credenziali per l'autenticazione, URL per la connessione di rete e così via.

Alcuni componenti hanno solo poche opzioni e altri potrebbero averne molte. Poiché i componenti in genere hanno impostazioni predefinite preconfigurate comunemente utilizzate, spesso potrebbe essere necessario configurare solo alcune opzioni su un componente; o nessuno.

La configurazione dei componenti può essere eseguita con il fileComponente DSL, in un file di configurazione (application.properties|yaml) o direttamente con codice Java.

(Video) Questa settimana in Hospitality Marketing Live Show 301 Recorded Broadcast

44.2.2.Configurazione delle opzioni dell'endpoint

Dove ti ritrovi a configurare di più è sugli endpoint, poiché gli endpoint spesso hanno molte opzioni, il che ti consente di configurare ciò di cui hai bisogno per l'endpoint. Le opzioni sono anche classificate in base al fatto che l'endpoint venga utilizzato come consumatore (da) o come produttore (a) o utilizzato per entrambi.

La configurazione degli endpoint viene spesso eseguita direttamente nell'URI dell'endpoint come percorso e parametri di query. Puoi anche usare ilEndpoint DSLcome un modo sicuro per configurare gli endpoint.

Una buona pratica quando si configurano le opzioni è usareSegnaposto di proprietà, che consente di non codificare URL, numeri di porta, informazioni riservate e altre impostazioni. In altre parole, i segnaposto consentono di esternalizzare la configurazione dal codice e offrono maggiore flessibilità e riutilizzo.

Le due sezioni seguenti elencano tutte le opzioni, in primo luogo per il componente seguito dall'endpoint.

44.3.Opzioni Componente

Il componente Mock supporta 4 opzioni, elencate di seguito.

NomeDescrizionePredefinitoTipo

lazyStartProducer(produttore)

Se il produttore dovrebbe essere avviato pigro (sul primo messaggio). Avviando lazy puoi usarlo per consentire a CamelContext e ai percorsi di avviarsi in situazioni in cui un produttore potrebbe altrimenti fallire durante l'avvio e causare il fallimento dell'avvio del percorso. Rinviando questo avvio per essere pigro, l'errore di avvio può essere gestito durante l'instradamento dei messaggi tramite i gestori degli errori di instradamento di Camel. Attenzione che quando viene elaborato il primo messaggio, la creazione e l'avvio del produttore potrebbero richiedere un po' di tempo e prolungare il tempo totale di elaborazione dell'elaborazione.

falso

booleano

tronco d'albero(produttore)

Per attivare la registrazione quando il mock riceve un messaggio in arrivo. Questo registrerà solo una volta a livello INFO per il messaggio in arrivo. Per una registrazione più dettagliata, imposta il logger al livello DEBUG per la classe org.apache.camel.component.mock.MockEndpoint.

falso

booleano

autowiredAbilitato(Avanzate)

Se il cablaggio automatico è abilitato. Viene utilizzato per le opzioni di autowiring automatico (l'opzione deve essere contrassegnata come autowired) cercando nel registro per trovare se esiste una singola istanza di tipo corrispondente, che viene quindi configurata sul componente. Questo può essere utilizzato per la configurazione automatica di origini dati JDBC, factory di connessione JMS, client AWS, ecc.

VERO

booleano

exchangeFormattatore(Avanzate)

AutocablatoImposta un ExchangeFormatter personalizzato per convertire l'Exchange in una stringa adatta per la registrazione. Se non specificato, l'impostazione predefinita è DefaultExchangeFormatter.

ExchangeFormattatore

44.4.Opzioni endpoint

L'endpoint Mock è configurato utilizzando la sintassi URI:

finto: nome

con i seguenti parametri di percorso e query:

44.4.1.Path Parameters (1 parametri)

NomeDescrizionePredefinitoTipo

nome(produttore)

NecessarioNome dell'endpoint fittizio.

Corda

44.4.2.Parametri query (12 parametri)

NomeDescrizionePredefinitoTipo

assertPeriod(produttore)

Imposta un periodo di tolleranza dopo il quale l'endpoint fittizio verrà riaffermato per garantire che l'asserzione preliminare sia ancora valida. Questo viene utilizzato ad esempio per affermare che arriva esattamente un numero di messaggi. Ad esempio, se expectedMessageCount(int) è stato impostato su 5, l'asserzione è soddisfatta quando arrivano 5 o più messaggi. Per garantire che arrivino esattamente 5 messaggi, è necessario attendere un breve periodo per garantire che non arrivino altri messaggi. Questo è ciò per cui puoi usare questo metodo. Per impostazione predefinita, questo periodo è disabilitato.

lungo

previstoCount(produttore)

Specifica il numero previsto di scambi di messaggi che devono essere ricevuti da questo endpoint. Attenzione: se vuoi aspettarti che 0 messaggi, fai molta attenzione, poiché 0 corrisponde all'inizio dei test, quindi devi impostare un periodo di asserzione per consentire l'esecuzione del test per un po 'per assicurarti che non ci siano ancora messaggi arrivati ; per questo usa setAssertPeriod(long). Un'alternativa è usare NotifyBuilder e usare il notificatore per sapere quando Camel ha finito di instradare alcuni messaggi, prima di chiamare il metodo assertIsSatisfied() sui mock. Ciò consente di non utilizzare un periodo di asserzione fisso, per velocizzare i tempi di test. Se vuoi affermare che esattamente l'ennesimo messaggio arriva a questo endpoint fittizio, consulta anche il metodo setAssertPeriod(long) per ulteriori dettagli.

-1

int

failFast(produttore)

Imposta se assertIsSatisfied() deve fallire rapidamente alla prima aspettativa fallita rilevata mentre potrebbe altrimenti attendere l'arrivo di tutti i messaggi previsti prima di eseguire le verifiche delle aspettative. È vero per impostazione predefinita. Impostare su false per utilizzare il comportamento come in Camel 2.x.

falso

booleano

lazyStartProducer(produttore)

Se il produttore dovrebbe essere avviato pigro (sul primo messaggio). Avviando lazy puoi usarlo per consentire a CamelContext e ai percorsi di avviarsi in situazioni in cui un produttore potrebbe altrimenti fallire durante l'avvio e causare il fallimento dell'avvio del percorso. Rinviando questo avvio per essere pigro, l'errore di avvio può essere gestito durante l'instradamento dei messaggi tramite i gestori degli errori di instradamento di Camel. Attenzione che quando viene elaborato il primo messaggio, la creazione e l'avvio del produttore potrebbero richiedere un po' di tempo e prolungare il tempo totale di elaborazione dell'elaborazione.

falso

booleano

tronco d'albero(produttore)

Per attivare la registrazione quando il mock riceve un messaggio in arrivo. Questo registrerà solo una volta a livello INFO per il messaggio in arrivo. Per una registrazione più dettagliata, imposta il logger al livello DEBUG per la classe org.apache.camel.component.mock.MockEndpoint.

falso

booleano

reportGruppo(produttore)

Un numero utilizzato per attivare la registrazione della velocità effettiva in base a gruppi della dimensione.

int

resultMinimumWaitTime(produttore)

Imposta il tempo minimo previsto (in millis) in cui assertIsSatisfied() attenderà su un latch fino a quando non sarà soddisfatto.

lungo

resultWaitTime(produttore)

Imposta la quantità massima di tempo (in millis) che assertIsSatisfied() attenderà su un latch fino a quando non sarà soddisfatto.

lungo

retainPrimo(produttore)

Specifica di conservare solo il primo n° numero di scambi ricevuti. Viene utilizzato durante il test con Big Data, per ridurre il consumo di memoria non archiviando copie di ogni Exchange ricevuto da questo endpoint fittizio. Importante: quando si utilizza questa limitazione, getReceivedCounter() restituirà comunque il numero effettivo di scambi ricevuti. Ad esempio, se abbiamo ricevuto 5000 scambi e abbiamo configurato per conservare solo i primi 10 scambi, getReceivedCounter() restituirà comunque 5000 ma ci sono solo i primi 10 scambi nei metodi getExchanges() e getReceivedExchanges(). Quando si utilizza questo metodo, alcuni degli altri metodi di aspettativa non sono supportati, ad esempio, expectedBodiesReceived(Object…​) imposta un'aspettativa sul primo numero di corpi ricevuti. È possibile configurare entrambi i metodi setRetainFirst(int) e setRetainLast(int), per limitare sia il primo che l'ultimo ricevuto.

-1

int

retainLast(produttore)

Specifica di conservare solo l'ultimo n° numero di scambi ricevuti. Viene utilizzato durante il test con Big Data, per ridurre il consumo di memoria non archiviando copie di ogni Exchange ricevuto da questo endpoint fittizio. Importante: quando si utilizza questa limitazione, getReceivedCounter() restituirà comunque il numero effettivo di scambi ricevuti. Ad esempio, se abbiamo ricevuto 5000 scambi e abbiamo configurato per conservare solo gli ultimi 20 scambi, getReceivedCounter() restituirà comunque 5000 ma ci sono solo gli ultimi 20 scambi nei metodi getExchanges() e getReceivedExchanges(). Quando si utilizza questo metodo, alcuni degli altri metodi di aspettativa non sono supportati, ad esempio, expectedBodiesReceived(Object…​) imposta un'aspettativa sul primo numero di corpi ricevuti. È possibile configurare entrambi i metodi setRetainFirst(int) e setRetainLast(int), per limitare sia il primo che l'ultimo ricevuto.

-1

int

sleepForEmptyTest(produttore)

Consente di specificare una sospensione da attendere per verificare che questo endpoint sia davvero vuoto quando expectedMessageCount(int) viene chiamato con zero.

lungo

copiaSuExchange(produttore (avanzato))

Imposta se creare una copia completa dell'Exchange in entrata quando viene ricevuto in questo endpoint fittizio. È vero per impostazione predefinita.

VERO

booleano

44.5.Semplice esempio

Ecco un semplice esempio di endpoint Mock in uso. Innanzitutto, l'endpoint viene risolto nel contesto. Quindi stabiliamo un'aspettativa e poi, dopo che il test è stato eseguito, affermiamo che le nostre aspettative sono state soddisfatte:

MockEndpoint resultEndpoint = context.getEndpoint("mock:foo", MockEndpoint.class);// imposta le aspettativeresultEndpoint.expectedMessageCount(2);// invia alcuni messaggi// ora asseriamo che l'endpoint mock:foo ha ricevuto 2 messaggiresultEndpoint.assertIsSatisfied( );

In genere si chiama sempre il metodo per verificare che le aspettative siano state soddisfatte dopo l'esecuzione di un test.

Camel aspetterà per impostazione predefinita 10 secondi quando il fileassertIsSatisfied()viene invocato. Questo può essere configurato impostando ilsetResultWaitTime(millis)metodo.

(Video) Corso di Metodologia Scientifica in Audio Uniasselvi Ead

44.6.Utilizzo di assertPeriod

Quando l'asserzione è soddisfatta, Camel smetterà di aspettare e continuerà dalassertIsSatisfiedmetodo. Ciò significa che se un nuovo messaggio arriva sull'endpoint fittizio, solo un po' più tardi, quell'arrivo non influirà sull'esito dell'asserzione. Supponiamo che tu voglia verificare che non arrivino nuovi messaggi dopo un periodo successivo, quindi puoi farlo impostando ilsetAssertPeriodmetodo, ad esempio:

MockEndpoint resultEndpoint = context.getEndpoint("mock:foo", MockEndpoint.class);resultEndpoint.setAssertPeriod(5000);resultEndpoint.expectedMessageCount(2);// invia alcuni messaggi// ora asseriamo che l'endpoint mock:foo ha ricevuto 2 messageresultEndpoint.assertIsSatisfied();

44.7.Definizione delle aspettative

Puoi vedere dal Javadoc diMockEndpointi vari metodi di supporto che puoi utilizzare per impostare le aspettative. I metodi principali sono i seguenti:

MetodoDescrizione

previstoMessageCount(int)

Per definire il numero di messaggi previsto sull'endpoint.

previstoMinimumMessageCount(int)

Per definire il numero minimo di messaggi previsti sull'endpoint.

Corpi attesiRicevuti(…​)

Definire i corpi previsti che dovrebbero essere ricevuti (in ordine).

previstoIntestazioneRicevuto(...​)

Per definire l'intestazione prevista che dovrebbe essere ricevuta

si aspettaAscendente(Espressione)

Per aggiungere un'aspettativa che i messaggi vengano ricevuti in ordine, utilizzando l'espressione data per confrontare i messaggi.

si aspettaDiscendente(Espressione)

Per aggiungere un'aspettativa che i messaggi vengano ricevuti in ordine, utilizzando l'espressione data per confrontare i messaggi.

si aspettaNoDuplicati(Espressione)

Per aggiungere un'aspettativa che non vengano ricevuti messaggi duplicati; utilizzando un'espressione per calcolare un identificatore univoco per ogni messaggio. Questo potrebbe essere qualcosa di simile alJMSMessageIDse si utilizza JMS o un numero di riferimento univoco all'interno del messaggio.

Ecco un altro esempio:

resultEndpoint.expectedBodiesReceived("firstMessageBody", "secondMessageBody", "thirdMessageBody");

44.8.Aggiunta di aspettative a messaggi specifici

Inoltre, puoi utilizzare ilmessaggio(int messaggioIndice)metodo per aggiungere asserzioni su un messaggio specifico ricevuto.

Ad esempio, per aggiungere aspettative delle intestazioni o del corpo del primo messaggio (utilizzando l'indicizzazione in base zero comejava.util.List), è possibile utilizzare il seguente codice:

resultEndpoint.message(0).header("foo").isEqualTo("bar");

Ci sono alcuni esempi dell'endpoint Mock in uso innucleo di cammellotest del processore.

44.9.Mocking degli endpoint esistenti

Camel ora ti consente di simulare automaticamente gli endpoint esistenti nelle tue rotte Camel.

Nota

Come funziona
Gli endpoint sono ancora in azione. Ciò che accade diversamente è che aDeridereendpoint viene iniettato e riceve prima il messaggio, quindi delega il messaggio all'endpoint di destinazione. Puoi vederlo come una sorta di intercettazione e delegato o listener di endpoint.

Supponiamo di avere il percorso indicato di seguito:

Itinerario

@Override protected RouteBuilder createRouteBuilder() genera un'eccezione { return new RouteBuilder() { @Override public void configure() genera un'eccezione { from("direct:start").routeId("start") .to("direct:foo") .to("log:foo").to("mock:risultato"); from("direct:foo").routeId("foo") .transform(constant("Bye World")); } }; }

È quindi possibile utilizzare ilconsiglioConfunzione in Camel per prendere in giro tutti gli endpoint in un determinato percorso dal test unitario, come mostrato di seguito:

consiglioConderidendo tutti gli endpoint

@Test public void testAdvisedMockEndpoints() getta Exception { // indica il percorso iniziale utilizzando il generatore di percorsi in stile lambda AdviceWith incorporato // che ha capacità estese rispetto al normale generatore di percorsi AdviceWith.adviceWith(context, "start", a -> // mock tutti gli endpoint a.mockEndpoints()); getMockEndpoint("mock:direct:start").expectedBodiesReceived("Hello World"); getMockEndpoint("mock:direct:foo").expectedBodiesReceived("Hello World"); getMockEndpoint("mock:log:foo").expectedBodiesReceived("Ciao mondo"); getMockEndpoint("mock:result").expectedBodiesReceived("Bye World"); template.sendBody("direct:start", "Hello World"); assertMockEndpointsSatisfied(); // test aggiuntivo per garantire la correttezza degli endpoint nel registro assertNotNull(context.hasEndpoint("direct:start")); assertNotNull(context.hasEndpoint("direct:foo")); assertNotNull(context.hasEndpoint("log:foo")); assertNotNull(context.hasEndpoint("mock:result")); // tutti gli endpoint sono stati derisi assertNotNull(context.hasEndpoint("mock:direct:start")); assertNotNull(context.hasEndpoint("mock:direct:foo")); assertNotNull(context.hasEndpoint("mock:log:foo")); }

Si noti che agli endpoint fittizi viene assegnato l'URImock:, Per esempiomock:direct:foo. Tronchi di cammello aINFORMAZIONIlivellare gli endpoint presi in giro:

INFO Endpoint consigliato [direct://foo] con endpoint fittizio [mock:direct:foo]

Nota

Gli endpoint simulati sono senza parametri
Gli endpoint che vengono presi in giro avranno i loro parametri rimossi. Ad esempio l'endpointlog:foo?showAll=trueverrà deriso al seguente endpointmock:log:foo. Si noti che i parametri sono stati rimossi.

È anche possibile deridere solo determinati endpoint utilizzando un pattern. Ad esempio per deridere tuttitronco d'alberoendpoint che fai come mostrato:

consiglioConderidendo solo gli endpoint del log utilizzando un modello

@Test public void testAdvisedMockEndpointsWithPattern() getta Exception { // indica il percorso iniziale utilizzando il generatore di percorsi in stile lambda AdviceWith incorporato // che ha capacità estese rispetto al normale generatore di percorsi AdviceWith.adviceWith(context, "start", a -> // endpoint di log solo mock a.mockEndpoints("log*")); // ora possiamo fare riferimento a log:foo come a un mock e impostare le nostre aspettative getMockEndpoint("mock:log:foo").expectedBodiesReceived("Bye World"); getMockEndpoint("mock:result").expectedBodiesReceived("Bye World"); template.sendBody("direct:start", "Hello World"); assertMockEndpointsSatisfied(); // test aggiuntivo per garantire la correttezza degli endpoint nel registro assertNotNull(context.hasEndpoint("direct:start")); assertNotNull(context.hasEndpoint("direct:foo")); assertNotNull(context.hasEndpoint("log:foo")); assertNotNull(context.hasEndpoint("mock:result")); // solo l'endpoint log:foo è stato deriso assertNotNull(context.hasEndpoint("mock:log:foo")); assertNull(context.hasEndpoint("mock:direct:start")); assertNull(context.hasEndpoint("mock:direct:foo")); }

Il modello supportato può essere un carattere jolly o un'espressione regolare. Vedi maggiori dettagli su questo su Intercept poiché è la stessa funzione di corrispondenza utilizzata da Camel.

Nota

Tieni presente che il mocking degli endpoint fa sì che i messaggi vengano copiati quando arrivano sul mock.
Ciò significa che Camel utilizzerà più memoria. Questo potrebbe non essere adatto quando invii molti messaggi.

44.10.Mocking degli endpoint esistenti utilizzando ilprova del cammellocomponente

Invece di usare ilconsiglioConper istruire Camel a simulare gli endpoint, puoi facilmente abilitare questo comportamento quando usi ilprova del cammelloKit di prova.

Lo stesso percorso può essere testato come segue. Nota che torniamo"*"dalisMockEndpointsmetodo, che dice a Camel di prendere in giro tutti gli endpoint.

Se vuoi solo deridere tuttitronco d'alberoendpoint che puoi restituire"tronco d'albero*"Invece.

isMockEndpointsutilizzando il kit di test del cammello

public class IsMockEndpointsJUnit4Test extends CamelTestSupport { @Override public String isMockEndpoints() { // esegue l'override di questo metodo e restituisce il modello per i quali endpoint simulare. // usa * per indicare tutti i return "*"; } @Test public void testMockAllEndpoints() throws Exception { // nota che abbiamo simulato automaticamente tutti gli endpoint e il nome degli endpoint è "mock:uri" getMockEndpoint("mock:direct:start").expectedBodiesReceived("Hello World") ; getMockEndpoint("mock:direct:foo").expectedBodiesReceived("Hello World"); getMockEndpoint("mock:log:foo").expectedBodiesReceived("Ciao mondo"); getMockEndpoint("mock:result").expectedBodiesReceived("Bye World"); template.sendBody("direct:start", "Hello World"); assertMockEndpointsSatisfied(); // test aggiuntivo per garantire la correttezza degli endpoint nel registro assertNotNull(context.hasEndpoint("direct:start")); assertNotNull(context.hasEndpoint("direct:foo")); assertNotNull(context.hasEndpoint("log:foo")); assertNotNull(context.hasEndpoint("mock:result")); // tutti gli endpoint sono stati derisi assertNotNull(context.hasEndpoint("mock:direct:start")); assertNotNull(context.hasEndpoint("mock:direct:foo")); assertNotNull(context.hasEndpoint("mock:log:foo")); } @Override protected RouteBuilder createRouteBuilder() genera un'eccezione { return new RouteBuilder() { @Override public void configure() genera un'eccezione { from("direct:start").to("direct:foo").to("log: foo").to("mock:risultato"); from("direct:foo").transform(constant("Ciao mondo")); } }; }}

44.11.Mocking degli endpoint esistenti con XML DSL

Se non usi ilprova del cammellocomponente per unit test (come mostrato sopra) è possibile utilizzare un approccio diverso quando si utilizzano i file XML per i percorsi.
La soluzione è creare un nuovo file XML utilizzato dal test unitario e quindi includere il file XML previsto che contiene il percorso che si desidera testare.

Supponiamo di avere il percorso inpercorso-cammello.xmlfile:

percorso-cammello.xml

           Ciao mondo   

Quindi creiamo un nuovo file XML come segue, dove includiamo il filepercorso-cammello.xmlfile e definire un bean spring con la classeorg.apache.camel.impl.InterceptSendToMockEndpointStrategyche dice a Camel di deridere tutti gli endpoint:

test-percorso-cammello.xml

   

Quindi nel tuo unit test carichi il nuovo file XML (test-percorso-cammello.xml) invece dipercorso-cammello.xml.

Solo per deridere tuttiTronco d'alberoendpoints è possibile definire il modello nel costruttore per il bean:

 

44.12.Mocking degli endpoint e salto dell'invio all'endpoint originale

A volte vuoi simulare facilmente e saltare l'invio a determinati endpoint. Quindi il messaggio viene deviato e inviato solo all'endpoint fittizio. Ora puoi usare ilmockEndpointsAndSkipmetodo utilizzando AdviceWith. L'esempio seguente salterà l'invio ai due endpoint"diretto: foo", E"diretto: bar".

consiglioCon finta e salta l'invio agli endpoint

@Test public void testAdvisedMockEndpointsWithSkip() lancia Exception { // consiglia il primo percorso utilizzando il generatore di percorsi AdviceWith incorporato // che ha capacità estese rispetto al normale generatore di percorsi AdviceWith.adviceWith(context.getRouteDefinitions().get(0), context, new AdviceWithRouteBuilder() { @Override public void configure() lancia un'eccezione { // simula l'invio a direct:foo e direct:bar e salta l'invio a esso mockEndpointsAndSkip("direct:foo", "direct:bar"); } }) ; getMockEndpoint("mock:result").expectedBodiesReceived("Hello World"); getMockEndpoint("mock:direct:foo").expectedMessageCount(1); getMockEndpoint("mock:direct:bar").expectedMessageCount(1); template.sendBody("direct:start", "Hello World"); assertMockEndpointsSatisfied(); // il messaggio non è stato inviato alla route direct:foo e quindi non è stato inviato // all'endpoint seda SedaEndpoint seda = context.getEndpoint("seda:foo", SedaEndpoint.class); assertEquals(0, seda.getCurrentQueueSize()); }

Lo stesso esempio utilizzando il kit di test

isMockEndpointsAndSkip utilizzando il kit di test del cammello

public class IsMockEndpointsAndSkipJUnit4Test extends CamelTestSupport { @Override public String isMockEndpointsAndSkip() { // esegue l'override di questo metodo e restituisce il modello per cui simulare gli endpoint, // e salta l'invio all'endpoint originale. return "direct:foo"; } @Test public void testMockEndpointAndSkip() throws Exception { // nota che abbiamo simulato automaticamente gli endpoint direct:foo e il nome degli endpoint è "mock:uri" getMockEndpoint("mock:result").expectedBodiesReceived("Hello World" ); getMockEndpoint("mock:direct:foo").expectedMessageCount(1); template.sendBody("direct:start", "Hello World"); assertMockEndpointsSatisfied(); // il messaggio non è stato inviato alla route direct:foo e quindi non è stato inviato all'endpoint seda SedaEndpoint seda = context.getEndpoint("seda:foo", SedaEndpoint.class); assertEquals(0, seda.getCurrentQueueSize()); } @Override protected RouteBuilder createRouteBuilder() genera un'eccezione { return new RouteBuilder() { @Override public void configure() genera un'eccezione { from("direct:start").to("direct:foo").to("mock: risultato"); from("direct:foo").transform(constant("Bye World")).to("seda:foo"); } }; }}

44.13.Limitazione del numero di messaggi da conservare

ILDerideregli endpoint manterranno per impostazione predefinita una copia di ogni Exchange ricevuto. Quindi, se esegui il test con molti messaggi, consumerà memoria.
Abbiamo introdotto due opzioniretainPrimoEretainLastche può essere utilizzato per specificare di mantenere solo l'N° del primo e/o dell'ultimo Scambio.

Ad esempio, nel codice seguente, vogliamo conservare solo una copia dei primi 5 e degli ultimi 5 scambi ricevuti dal mock.

MockEndpoint mock = getMockEndpoint("mock:data"); mock.setRetainFirst(5); mock.setRetainLast(5); mock.expectedMessageCount(2000); mock.assertIsSatisfied();

L'utilizzo di questo ha alcune limitazioni. ILgetExchanges()EgetReceivedExchanges()metodi sulMockEndpointrestituirà solo le copie trattenute degli Scambi. Quindi nell'esempio sopra, l'elenco conterrà 10 scambi; i primi cinque e gli ultimi cinque.
ILretainPrimoEretainLastopzioni hanno anche limitazioni sui metodi di aspettativa che è possibile utilizzare. Ad esempio ilprevistoXXXi metodi che funzionano su corpi di messaggi, intestazioni, ecc. funzioneranno solo sui messaggi conservati. Nell'esempio precedente possono testare solo le aspettative sui 10 messaggi conservati.

44.14. Collaudi con orari di arrivo

ILDeriderel'endpoint archivia l'ora di arrivo del messaggio come proprietà nell'Exchange

Data ora = exchange.getProperty(Exchange.RECEIVED_TIMESTAMP, Date.class);

Puoi utilizzare queste informazioni per sapere quando il messaggio è arrivato sul mock. Ma fornisce anche le basi per conoscere l'intervallo di tempo tra il messaggio precedente e quello successivo arrivato sul mock. Puoi usarlo per impostare le aspettative usando ilarrivaDSL sull'endpoint fittizio.

Ad esempio per dire che il primo messaggio dovrebbe arrivare tra 0-2 secondi prima del successivo puoi fare:

mock.message(0).arrives().noLaterThan(2).seconds().beforeNext();

Puoi anche definire questo come quel secondo messaggio (0 indice basato) dovrebbe arrivare non più tardi di 0-2 secondi dopo il precedente:

mock.message(1).arrives().noLaterThan(2).seconds().afterPrevious();

Puoi anche usare between per impostare un limite inferiore. Ad esempio, supponiamo che dovrebbe essere compreso tra 1 e 4 secondi:

mock.message(1).arrives().between(1, 4).seconds().afterPrevious();

Puoi anche impostare l'aspettativa su tutti i messaggi, ad esempio per dire che il divario tra loro dovrebbe essere al massimo 1 secondo:

mock.allMessages().arrives().noLaterThan(1).seconds().beforeNext();

Nota

Unità di tempo
Nell'esempio sopra usiamosecondicome unità di tempo, ma Camel offremillisecondi, Eminutianche.

44.15.Configurazione automatica Spring Boot

Quando si utilizza mock con Spring Boot, assicurarsi di utilizzare la seguente dipendenza Maven per avere il supporto per la configurazione automatica:

 org.apache.camel.springboot camel-mock-starter

Il componente supporta 5 opzioni, elencate di seguito.

NomeDescrizionePredefinitoTipo

camel.component.mock.autowired-enabled

Se il cablaggio automatico è abilitato. Viene utilizzato per le opzioni di autowiring automatico (l'opzione deve essere contrassegnata come autowired) cercando nel registro per trovare se esiste una singola istanza di tipo corrispondente, che viene quindi configurata sul componente. Questo può essere utilizzato per la configurazione automatica di origini dati JDBC, factory di connessione JMS, client AWS, ecc.

VERO

Booleano

camel.component.mock.enabled

Indica se abilitare la configurazione automatica del componente fittizio. Questo è abilitato per impostazione predefinita.

Booleano

camel.component.mock.exchange-formatter

Imposta un ExchangeFormatter personalizzato per convertire l'Exchange in una stringa adatta per la registrazione. Se non specificato, l'impostazione predefinita è DefaultExchangeFormatter. L'opzione è di tipo org.apache.camel.spi.ExchangeFormatter.

ExchangeFormattatore

camel.component.mock.lazy-start-produttore

Se il produttore dovrebbe essere avviato pigro (sul primo messaggio). Avviando lazy puoi usarlo per consentire a CamelContext e ai percorsi di avviarsi in situazioni in cui un produttore potrebbe altrimenti fallire durante l'avvio e causare il fallimento dell'avvio del percorso. Rinviando questo avvio per essere pigro, l'errore di avvio può essere gestito durante l'instradamento dei messaggi tramite i gestori degli errori di instradamento di Camel. Attenzione che quando viene elaborato il primo messaggio, la creazione e l'avvio del produttore potrebbero richiedere un po' di tempo e prolungare il tempo totale di elaborazione dell'elaborazione.

falso

Booleano

camel.component.mock.log

Per attivare la registrazione quando il mock riceve un messaggio in arrivo. Questo registrerà solo una volta a livello INFO per il messaggio in arrivo. Per una registrazione più dettagliata, imposta il logger al livello DEBUG per la classe org.apache.camel.component.mock.MockEndpoint.

falso

Booleano

FAQs

What is Red Hat software used for? ›

Red Hat offers a variety of open source software that DevOps engineers and businesses use. These include operating system platforms, storage, middleware, management products, as well as training, support and consulting services.

What is open source Red Hat? ›

Open source software is code that is designed to be publicly accessible—anyone can see, modify, and distribute the code as they see fit. Open source software is developed in a decentralized and collaborative way, relying on peer review and community production.

Is Red Hat certification worth IT? ›

Red Hat is a software company that specializes in creating enterprise-level open-source products. For those who work in information technology (IT), whose technical knowledge and skills are valuable assets, earning a Red Hat certification is a great way to expand your skill set and advance your career.

Is Red Hat free for personal use? ›

Red Hat offers subscriptions with a choice of support coverage (typical business day only, 24x7, etc.) and response time agreements. The no-cost Red Hat Developer Subscription for Individuals is self-supported. Your subscription gives you access to the Red Hat Customer Portal, access.redhat.com.

Are Red Hat exams hard? ›

Whether you're looking to get your foot in the door of the IT world, or you're a seasoned professional looking to move up the ladder, Red Hat's got you covered. However, Red Hat's certifications are not easy to pass. After all, the certification exams are all about performing exam tasks.

How is Red Hat different from Microsoft Windows? ›

The main difference between the two solutions is that Red Hat Enterprise Linux (RHEL) is not user friendly, while reviewers say that Windows 10 is. Windows users are also happier with its pricing. To learn more, read our detailed Red Hat Enterprise Linux (RHEL) vs. Windows 10 Report (Updated: May 2023).

How do I know if my Red Hat is 32 or 64-bit? ›

How can I tell is my machine is 32 or 64 bit? The Operating System command uname -a will provide you that information on Linux. The output will provide you some insight as to if the Operating System is 32 or 64 bit. Linux machines that are running 64 bit have the 64 referenced within the result of the uname -a command.

Why is Red Hat so popular? ›

Red Hat Enterprise Linux gives you a consistent, stable, and high-performance platform across hybrid cloud deployments, along with built-in manageability and integration with the broader Red Hat management and automation portfolio.

What is Red Hat Web Console? ›

Tags:Platform. The Red Hat Enterprise Linux (RHEL) web console is a web-based interface designed for managing and monitoring RHEL systems.

What are 3 examples of open source? ›

10.4 Examples of Open Source Software
  • Firefox—a Web browser that competes with Internet Explorer.
  • OpenOffice—a competitor to Microsoft Office.
  • Gimp—a graphic tool with features found in Photoshop.
  • Alfresco—collaboration software that competes with Microsoft Sharepoint and EMC's Documentum.

Is Red Hat certification worth IT 2023? ›

RED hat Linux worth it as It's a great system for both personal and business use. It's reliable, secure, and easy to use. Plus, it's affordable. If you're looking for a reliable and stable operating system, RED hat Linux is the right choice.

How much does Red Hat certification cost in USA? ›

A RHCSA exam costs USD $400 plus all applicable taxes (approximately) to sit for the exam. But, this cost is different for different countries. The training cost for the RHCSA examination ranges somewhere between $200-300 USD.

Which Red Hat certification is best for beginners? ›

If you are a beginner and are looking to add Ansible to your resume, start by completing the Automation with Ansible (DO407) course for Red Hat. To get the specialist certification, you must pass the EX407 exam that tests your practical knowledge of Ansible automation.

How much is a Red Hat membership? ›

How Much Do Red Hat Subscriptions Cost?
Red Hat License SubscriptionsIndividual Plan Cost (per year)
Red Hat Enterprise Linux ServerSelf-Support $349Standard$799Premium$1299
Red Hat Enterprise Linux for Virtual DatacentersStandard$2,499Premium$3,999
Red Hat JBoss Enterprise Application PlatformStandard$8,000Premium$12,000
1 more row
Oct 31, 2022

Is Red Hat expensive? ›

It isn't expensive, and it's slightly cheaper than Microsoft. Taking into account its features, its price is okay. Support is something that serious enterprises would want to have. The advantage of running an open-source tool is that you do not have to pay for the tool in terms of licensing, but you don't have support.

Why do you have to pay for Red Hat? ›

An active Red Hat subscription provides everything needed to run your systems—including mission-critical systems—reliably and securely. More than software, it's access to a community of experts, knowledge resources, security updates, and support tools you can't get anywhere else.

What is the hardest certification exam? ›

Top 10 Hardest Exams in the World
  • Civil Services Exam (CSE)
  • GATE.
  • GRE.
  • Master Sommelier Diploma Exam.
  • ICAI CA Exams.
  • CCIE (Cisco Certified Internetwork Expert)
  • Mensa International.
  • CFA.
Feb 17, 2023

What is the hardest financial exam? ›

According to the Wall Street Journal, the CFA exam is the most difficult exam in the world, with less than 1/5th of candidates clearing it, after repeated attempts, on a yearly basis.

How many questions are on the Red Hat exam? ›

Exam Information:

Duration: 150 minutes. Number of Questions: 20. Passing Score: 210 / 300.

Does Red Hat have a desktop? ›

Running a Red Hat desktop/workstation subscription with self-support might come in handy when you need additional support.

Does Microsoft use Redhat? ›

"With Microsoft Azure, we get an open and flexible cloud infrastructure that supports our Red Hat ecosystem and helps us deliver superior products to our customers."

What desktop does redhat use? ›

GNOME — The default desktop environment for Red Hat Enterprise Linux based on the GTK+ 2 graphical toolkit. KDE — An alternative desktop environment based on the Qt 3 graphical toolkit.

How do I know if I should use 32 or 64-bit? ›

How do I tell if my computer can run a 64-bit version of Windows?
  • Select the Start button, then select Settings > System > About . Open About settings.
  • At the right, under Device specifications, see System type.

Is there a difference between 32-bit and 64-bit? ›

As its name suggests, the 32 bit OS can store and handle lesser data than the 64 bit OS. More specifically, it addresses a maximum of 4,294,967,296 bytes (4 GB) of RAM. The 64 bit OS, on the other hand, can handle more data than the 32 bit OS.

What's the difference between 32-bit and 64-bit? ›

Difference between 32-bit and 64-bit OS. A 64-bit processor is more capable than a 32-bit processor because it can handle more data at once. A 64-bit processor can store more computational values, including memory addresses, which means it can access over 4 billion times the physical memory of a 32-bit processor.

What people wear red hats? ›

Red Hat Society Rules

The group is generally for women over age 50, although women under that age can still join. Purple clothes and red hats are the attire colors for those at least age 50, while women under that age wear lavender clothing and pink hats.

What are the disadvantages of Red Hat? ›

Disadvantages of Redhat:
  • It has a long history of security holes.
  • It isn't designed for remote management.
  • Like all flavors of linux, it has large portions of code which were written sloppily several years ago but don't get replaced because they are "good enough".
Feb 26, 2001

What is Secure Boot Red Hat? ›

Secure Boot uses digital key pairs to check that SystemTap and other startup code hasn't been altered by a rootkit or similar mechanism. Posted: June 1, 2022 | 7 min read | by Stan Cox (Red Hat)

How do I disable Red Hat firewall? ›

How to Disable the Firewall for Red Hat Linux
  1. Stop the ipchains service. Type: # service ipchains stop.
  2. Stop the iptables service. ...
  3. Stop the ipchains service from starting when you restart the server. ...
  4. Stop the iptables service from starting when you restart the server. ...
  5. Reboot the PXE/DHCP server.

How do I disable red hat IPv6? ›

Here's how to disable IPv6 on Linux if you're running a Red Hat-based system:
  1. Open the terminal window.
  2. Change to the root user.
  3. Type these commands: sysctl -w net.ipv6.conf.all.disable_ipv6=1. ...
  4. To re-enable IPv6, type these commands: sysctl -w net.ipv6.conf.all.disable_ipv6=0.

Which software is freely available in Internet? ›

The Free Software Directory maintains a large database of free-software packages. Some of the best-known examples include the Linux kernel, the BSD and Linux operating systems, the GNU Compiler Collection and C library; the MySQL relational database; the Apache web server; and the Sendmail mail transport agent.

Is Android an open source operating system? ›

Android is an open source operating system for mobile devices and a corresponding open source project led by Google.

What is open source code used for? ›

Open source fosters ingenuity; programmers can use pre-existing code to improve the software and even come up with their own innovations. Open source comes with a built-in community that continuously modifies and improves the source code. Open source provides great learning opportunities for new programmers.

Is Red Hat for Linux or Windows? ›

Red Hat's open hybrid cloud strategy is built on the technological foundation of Linux®, containers, and automation. An open hybrid cloud approach gives you the flexibility to run your applications anywhere you need them.

What companies use Red Hat? ›

Companies Currently Using Red Hat Enterprise Linux Server
Company NameWebsiteHQ Address
Sumitomo Mitsui Banking Corporationsmbcgroup.com277 Park Ave, Fl 6
Harmonia Holdings Group, LLCharmonia.com2020 Kraft Dr., Suite 2400
Lockheed Martinlockheedmartin.com6801 Rockledge Dr
Peratonperaton.com12975 Worldgate Dr
2 more rows

Does Microsoft use Red Hat? ›

"With Microsoft Azure, we get an open and flexible cloud infrastructure that supports our Red Hat ecosystem and helps us deliver superior products to our customers."

Why do companies use Redhat? ›

“Each cloud is unique, so you need a flexible yet stable operating system. Red Hat Enterprise Linux offers the flexibility of open source code and the innovation of its communities, as well as certifications from hundreds of service providers and public clouds", detailed on their official website.

Does Red Hat work with Windows? ›

Red Hat Enterprise Linux offers multiple ways to tightly integrate Linux domains with Active Directory (AD) on Microsoft Windows. The integration is possible on different domain objects that include users, groups, services, or systems.

What file system does Red Hat use? ›

Red Hat Enterprise Linux uses the Filesystem Hierarchy Standard (FHS) file system structure, which defines the names, locations, and permissions for many file types and directories.

What is Red Hat hacker? ›

A hacker who acts as a digital activist or a vigilante and uses their hacking knowledge to convey a message. Their reasons for hacking might be political, social, religious, or ideological.

Is Redhat Linux Dead? ›

In 2003, Red Hat discontinued the Red Hat Linux line in favor of Red Hat Enterprise Linux (RHEL) for enterprise environments. Fedora Linux, developed by the community-supported Fedora Project and sponsored by Red Hat, is a free-of-cost alternative intended for home use.

Which Linux is closest to Red Hat? ›

Oracle Linux

Oracle Linux is an open-source distro developed by Oracle Corporation that aims to accelerate digital transformation through its optimized and secure operating environment. This distribution is created using RHEL source code and is fully compatible with all Red Hat software.

Does Google use Red Hat? ›

The RHEL images that are available on Compute Engine are built by Google in partnership with Red Hat.

Does NASA use Red Hat? ›

Red Hat provides the 24x7 support needed to support NASA's mission.

How many companies use Red Hat? ›

More Than 1,000 Enterprises Across the Globe Adopt Red Hat OpenShift Container Platform to Power Business Applications. Red Hat, Inc.

Is Red Hat a browser? ›

Red Hat Enterprise Linux comes with several Web browsers, graphical applications that use your Internet connection to access the World Wide Web: news, research, shopping, banking, and more.

Is Red Hat Linux or Linux? ›

Red Hat Enterprise Linux (RHEL) is an enterprise Linux operating system (OS) developed by Red Hat for the business market. RHEL, formerly known as Red Hat Linux Advanced Server, is certified with thousands of vendors and across hundreds of clouds.

Is Red Hat cyber security? ›

Red Hat provides the technologies to build and deploy applications across a hybrid cloud more securely. We take a layered, defense-in-depth approach that helps customers implement security across the entire infrastructure and application stack and life cycle.

Top Articles
Latest Posts
Article information

Author: Greg O'Connell

Last Updated: 06/29/2023

Views: 5229

Rating: 4.1 / 5 (42 voted)

Reviews: 81% of readers found this page helpful

Author information

Name: Greg O'Connell

Birthday: 1992-01-10

Address: Suite 517 2436 Jefferey Pass, Shanitaside, UT 27519

Phone: +2614651609714

Job: Education Developer

Hobby: Cooking, Gambling, Pottery, Shooting, Baseball, Singing, Snowboarding

Introduction: My name is Greg O'Connell, I am a delightful, colorful, talented, kind, lively, modern, tender person who loves writing and wants to share my knowledge and understanding with you.