En el anterior blog posts expliqué cómo utilizar Docker contenedores ejecutando Couchbase durante tus pruebas. Ambos post tenían como requisito que tuvieras que construir tu propia imagen Docker de Couchbase con el cluster y los datos ya configurados. En este post te contaré cómo puedes usar nuestra imagen Docker oficial y configurar el Cluster a tu gusto durante la fase de configuración de tu test.

Un Couchbase TestContainer personalizado

TestContainers ya soporta varios tipos específicos de contenedores, especialmente en el mundo relacional como se puede ver en su documentación. Ofrecen algunas características avanzadas como una conexión JDBC que te permite usar la base de datos subyacente directamente. Con el mismo espíritu podemos crear un CouchbaseContainer personalizado que te permitirá configurar el cluster y los buckets durante tus pruebas.

Se encargará de arrancar la imagen docker y devuelve una instancia de CouchbaseCluster configurada. Primero definimos el identificador por defecto de la imagen docker y el puerto Liveness como puerto 8091. Este es el que será testeado por la estrategia de espera HTTP por defecto para la ruta '/ui/index.html#/'. Una vez que podamos llegar a esta página podemos empezar a configurar el cluster.

El segundo paso es sobrescribir el método configure para asegurarnos de que exponemos todos los puertos necesarios y establecemos la estrategia de espera HTTP,

En este punto puedes probar ese contenedor genérico. Tendrías la imagen funcionando en un estado en el que necesitas configurar Couchbase. Necesitas seguir todos los pasos del asistente. Estos pasos se pueden automatizar a través de las herramientas CLI o la API REST. Vamos a utilizar la API para configurar el clúster.

Hay tres llamadas obligatorias que tenemos que hacer. Una para configurar las cuotas de ram, otra para configurar el nombre de usuario y la contraseña del usuario admin y otra para configurar los servicios disponibles en el cluster (key/value, index, query y fts).

Usando curl esas llamadas se verían así:

Hay múltiples maneras de hacer un POST en Java, aquí hay un ejemplo:

Todas estas llamadas se realizarán desde el initCluster método. El contenido de esas llamadas dependerá de la configuración proporcionada al contenedor. Podemos añadir algunos métodos para definir qué servicios están habilitados, cuáles son el nombre de usuario y la contraseña, las cuotas de ram o los buckets de muestra a instalar.

Después de implementar ese método, vamos a exponer un CouchbaseEnvironnement y un CouchbaseCluster. El getter del entorno es responsable de ejecutar initCluster si aún no se ha inicializado. Este método también requiere el método estrategia de espera personalizada escribió en el post anterior. Básicamente sondea en '/pools/default' hasta que el primer nodo presenta un estado saludable.

Aquí está el código de la clase completa:

Utilización

Para usar el CouchbaseContainer puedes simplemente hacer algo como:

Si desea que sólo se ejecute el servicio k/v con todas las muestras de datos importadas:

Como puedes ver esto es muy simple y permite a cualquiera ejecutar pruebas contra Couchbase siempre y cuando tengan Docker instalado.

 Conclusión

Dinos en los comentarios si te gusta esto y quieres que te proporcionemos configuraciones adicionales y atajos para configurar tu Cluster Couchbase durante las pruebas.

Autor

Publicado por Laurent Doguin

Laurent es un metalero empollón que vive en París. Principalmente escribe código en Java y texto estructurado en AsciiDoc, y a menudo habla sobre datos, programación reactiva y otras cosas de moda. También fue Developer Advocate de Clever Cloud y Nuxeo, donde dedicó su tiempo y experiencia a ayudar a esas comunidades a crecer y fortalecerse. Ahora dirige las relaciones con los desarrolladores en Couchbase.

Dejar una respuesta