Mini-Platform for Unit Test

Introduzione

Questo articolo descrive come simulare in locale o su un proprio server i protocolli di comunicazione utilizzati da YUCCA in modo da semplificare le attività di unit test.

Lo scopo è quello di fornite un meccanismo per simulare l’invio e la ricezione dei dati su SDP senza dover disporre della piattaforma completa (vengono emulate le funzioni di acquisizione e fruizione in MQTT e STOMP over WebSocket).

Strumenti necessari

Questo articolo descrive come implementare tale soluzione dando per scontata la conoscenza degli strumenti utilizzati. Se fosse necessario approfondire il funzionamento dei singoli strumenti, si rimanda alla documentazione ufficiale degli stessi.

Per implementare la mini-platform è necessario disporre di:

  • Un PC o una virtual machine con sistema operativo Linux o Windows (nella realizzazione del prototipo è stato utilizzato Centos 6.4 ma le istruzioni che forniamo sono valide per qualsiasi distribuzione Linux. Se si vuole utilizzare il sistema operativo Windows, per l’installazione degli strumenti fare riferimento alla documentazione ufficiale degli stessi).
  • Il prodotto Apache ActiveMQ versione 5.9.0.
  • Alcune implementazioni di producer e consumer (si possono utilizzare quelle fornite) per testare la simulazione. Dopo l’installazione, sarà possibile utilizzare qualsiasi applicazione compatibile.

Installazione del server

Predisporre un server fisico o virtuale con un sistema operativo Linux installato (nel prototipo noi abbiamo utilizzato Centos 6.4). Per l’installazione del sistema operativo fare riferimento alla documentazione ufficiale. Nel caso in cui si voglia utilizzare un server Windows è necessario adattare le operazioni descritte a questo sistema operativo.

Scaricare ActiveMQ 5.9 dal sito ufficiale oppure, da shell, eseguire il comando:

wget http://archive.apache.org/dist/activemq/apache-activemq/5.9.0/apache-activemq-5.9.0-bin.tar.gz

Scompattare il file con i tools forniti dal sistema operativo e copiarli nella cartella di installazione (si suggerisce /opt/ActiveMQ) oppure eseguire da shell i seguenti comandi:

tar xvf activemq-5.9.0-bin.tar.gz mv activemq-5.9.0-bin.tar.gz /opt/ActiveMQ

A questo punto è necessario configurare ActiveMQ con la definizione degli stream e le credenziali di accesso alle stesse. È stata predisposta una configurazione iniziale che è possibile utilizzare per verificare il corretto funzionamento del sistema di simulazione. I file di configurazione iniziali sono disponibili su GIT. Copiare i due file nella cartella conf di ActiveMQ. Da linea di comando eseguire:

cp activemq.xml credentials.properties /opt/ActiveMQ/conf

Configurazione degli Stream

Gli stream sono definiti all’interno del file activemq.xml dove bisogna specificare le seguenti informazioni:

  • transportConnector per la configurazione dei connettori di ricezione ed esposizione in mqtt, stomp, etc.
  • authorizationPlugin per la configurazione delle credenziali di accesso e dei permessi di lettura/scrittura sulle topics.
  • destinationInterceptor per la creazione di topic pasthrough dove l’input viene reindirizzato su una coda di output.

La documentazione ufficiale di ActiveMQ descrive in modo chiaro e completo le operazioni di configurazione degli stream.

Nel file di configurazione fornito come esempio, è stato definito uno stream per un ipotetico tenant sandbox avente una coda di input denominata “input.sandbox” che viene reindirizzata sulla coda di output “output.sandbox.miostream”. I nomi delle code di input/output sono liberamente configurabili ma si suggerisce di utilizzare gli standard YUCCA per la definizione delle interfacce di input/output .

<destinationInterceptors>
<virtualDestinationInterceptor>
<virtualDestinations>
<compositeTopic name=»input.sandbox»>
<forwardTo>
<topic physicalName=»output.sandbox.miostream» />

</forwardTo>

</compositeTopic>

</virtualDestinations>

</virtualDestinationInterceptor>

</destinationInterceptors>

Le permission di accesso definiscono

<plugins>
<simpleAuthenticationPlugin>
<users>
<authenticationUser username=»system» password=»${activemq.password}» groups=»users,admins»/> <authenticationUser username=»guest» password=»${guest.password}» groups=»guests»/> <authenticationUser username=»sandbox» password=»${sandbox.password}» groups=»sandboxs,guests»/>

</users>

</simpleAuthenticationPlugin>

<!– lets configure a destination based authorization mechanism –> <authorizationPlugin>

<map>
<authorizationMap>
<authorizationEntries>
<authorizationEntry queue=»>» read=»admins» write=»admins» admin=»admins» /> <authorizationEntry topic=»>» read=»admins» write=»admins» admin=»admins» /> <authorizationEntry topic=»ActiveMQ.Advisory.>» read=»guests» write=»guests» admin=»guests»/> <authorizationEntry topic=»input.sandbox» read=»admins,sandboxs» write=»admins,sandboxs» admin=»admins,sandboxs» /> <authorizationEntry topic=»output.sandbox.>» read=»guests» write=»admins» admin=»admins,sandboxs,guests» />

</authorizationEntries> <!– let’s assign roles to temporary destinations. comment this entry if we don’t want any roles assigned to temp destinations –> <tempDestinationAuthorizationEntry>

<tempDestinationAuthorizationEntry read=»tempDestinationAdmins» write=»tempDestinationAdmins» admin=»tempDestinationAdmins»/>

</tempDestinationAuthorizationEntry>

</authorizationMap>

</map>

</authorizationPlugin>

</plugins>

Le password associate alle credenziali sono presenti nel file credential.properties all’interno del quale inserire tutte le credenziali. Di default sono stati definiti gli utenti guest e sandbox con le relative password.

Testing della piattaforma

Avviare la piattaforma eseguendo il comando

/opt/ActiveMQ/bin/activemq start (per l’avvio in background del servizio) /opt/ActiveMQ/bin/activemq console (per l’avvio in foreground)

Per testare l’invio di messaggi su una coda mqtt è possibile utilizzare la seguente demo. Si tratta di una classe java che invia un singolo messaggio sulla coda specificata. Per utilizzarla è sufficiente caricarla nel proprio ambiente di sviluppo, personalizzare l’indirizzo del server ActiveMQ e il nome della coda e compilare. L’esempio utilizza le librerie di Apache Paho che è necessario importare all’interno del progetto. L’esempio è preconfigurato per operare con le code definite nel file precedente.

Per testare la sottoscrizione dei messaggi è possibile utilizzare la seguente demo che mostra come sottoscrivere, in javascript, una coda STOMP, ricevere i messaggi e mostrarli all’interno di una pagina html. Per utilizzarlo è necessario configurare l’indirizzo del server e il nome della coda, quindi aprire il file con il browser. Sono preconfigurate le code descritte in precedenza.

Definendo le opportune code è possibile utilizzare tutte le demo disponibili.