JUnit Testing Cassandra avec serveur embarqué
Quelle est la meilleure approche pour écrire des tests unitaires pour le code qui persiste données nosql banque de données, dans notre cas, cassandra?
=> Nous sommes l'aide d'embedded server approche à l'aide d'un utilitaire à partir de git hub (https://github.com/hector-client/hector/blob/master/test/src/main/java/me/prettyprint/hector/testutils/EmbeddedServerHelper.java). Toutefois, j'ai été voir quelques problèmes avec cela. 1) Il persiste des données à travers de multiples cas de test en le rendant dur pour nous assurer que les données sont différentes en cas de test d'une classe de test. J'ai essayé d'appeler le nettoyage @Après chaque cas de test, mais qui ne semble pas de nettoyage des données. 2) Nous sommes à court de mémoire que nous ajoutons plus de tests et ce pourrait être parce que de 1, mais je ne suis pas encore sûr. J'ai actuellement 1G taille de segment de mémoire pour exécuter mon construire.
=> L'autre approche, j'ai été pensée est pour se moquer de la cassandra de stockage. Mais qui pourrait fuir certains problèmes dans le cassandra schéma comme nous l'avons souvent constaté l'approche ci-dessus attraper des problèmes avec la façon dont les données sont stockées dans cassandra.
S'il vous plaît laissez-moi savoir que vous pensées sur cette question et si quelqu'un a utilisé EmbeddedServerHelper et sont familiers avec les questions que j'ai mentionnées.
Juste une mise à jour. J'ai été en mesure de résoudre 2) en cours d'exécution de java heap space problème lors de l'exécution, construit par la modification de la in_memory_compaction_limit_in_mb paramètre à 32 dans le cassandra.yaml utilisé par le test serveur intégré. Le lien ci-dessous m'a aidé à http://www.datastax.com/docs/0.7/configuration/storage_configuration#in-memory-compaction-limit-in-mb. Il a 64 ans et a commencé à échouer de façon constante au cours de compactage.
source d'informationauteur bobbypavan
Vous devez vous connecter pour publier un commentaire.
Nous utilisons un intégré à cassandra serveur, et je pense que c'est la meilleure approche lors de l'essai de cassandra, se moquant de l'api de cassandra est trop enclins à faire des erreurs.
EmbeddedServerHelper.cleanup() supprime les fichiers de la rom du système de fichiers, mais les données peuvent encore exister dans la mémoire.
Il y a un teardown() la méthode en EmbeddedServerHelper, mais je ne sais pas comment efficace, qui est, comme cassandra a beaucoup de statique des singletons dont l'état n'est pas nettoyé par teardown()
Ce que nous faisons est que nous avons une méthode qui appelle tronquer sur chaque colonne de la famille entre les tests. Qui va supprimer toutes les données.
Je pense que vous pouvez prendre un coup d'oeil à cassandra-unité : https://github.com/jsevellec/cassandra-unit/wiki
- Je utiliser le Mojo Cassandra plugin maven.
Voici un exemple de configuration du plugin que j'utilise pour faire tourner un serveur de Cassandra pour une utilisation par mes tests d'unité:
J'ai réussi à obtenir Hector de serveur intégrée de la classe helper de travail qui peut être très utile, cependant, j'ai couru dans le chargeur de classe conflits dus à ce bug.
Vous ne pouvez pas redémarrer instance de Cassandra dans un délai d'un VM - Cassandra a "shutdown pour tuer politique" en raison de singeltons qu'ils utilisent.
Vous aussi n'avez pas besoin de redémarrer Casandra, juste à supprimer toutes les familles de la colonne (CFs). Afin de supprimer FC, vous devez d'abord vider les données, compact et après que, finalement, vous pouvez le déposer.
Ce code permet de se connecter à embarqués Cassandra et exécuter nécessaire cleaup:
Maintenant exécuter CLI baisse CF script:
et script.txt pourrait avoir:
Par "ne semble pas à nettoyer les données" que voulez-vous dire exactement? Que vous voyez toujours vos données dans la base de données?
Ce problème peut être dû à Cassandra qui ne supprime pas les "valeurs" immédiatement, mais seulement après que le
gc_grace_seconds
secondes sont passés (qui en général par défaut à 10 jours). Cassandra marques les valeurs qui doivent être supprimés.En plus de ce qui a été posté, il ya des cas où vous voulez tester la gestion d'erreur - comment votre application se comporter lorsqu'un Cassandra requête échoue.
Il y a un peu de bibliothèques qui peuvent vous aider avec ceci:
Je suis l'auteur de cassandra-espion et écrivit-il m'aider à tester ces cas.