@Override public void init(Cluster cluster) { cluster.register(percentileTracker); }
@Override public void onRegister(Cluster cluster) { super.onRegister(cluster); cluster.register(percentileLatencyTracker); }
@Override public void init(Cluster cluster, Collection<Host> hosts) { childPolicy.init(cluster, hosts); cluster.register(this.errorTracker); }
@Override public Cluster register(LatencyTracker tracker) { return delegate().register(tracker); }
@Override public Cluster register(Host.StateListener listener) { return delegate().register(listener); }
@Override public Cluster register(SchemaChangeListener listener) { return delegate().register(listener); }
@Test(groups = "short") public void should_log_regular_statements() throws Exception { // given normal.setLevel(DEBUG); queryLogger = QueryLogger.builder().withConstantThreshold(Long.MAX_VALUE).build(); cluster().register(queryLogger); String query = "SELECT c_text FROM test WHERE pk = 42"; session().execute(query); // then String line = normalAppender.waitAndGet(10000); assertThat(line) .contains("Query completed normally") .contains(ipOfNode(1)) .contains(query) .doesNotContain("parameters"); }
@Test(groups = "short") @CassandraVersion("2.0.0") public void should_log_null_parameter_simple_statements() throws Exception { // given normal.setLevel(TRACE); queryLogger = QueryLogger.builder().build(); cluster().register(queryLogger); // when String query = "UPDATE test SET c_text = ? WHERE pk = ?"; SimpleStatement ss = new SimpleStatement(query, null, 42); session().execute(ss); // then String line = normalAppender.waitAndGet(10000); assertThat(line) .contains("Query completed normally") .contains(ipOfNode(1)) .contains(query) .contains("42") .contains("NULL"); }
@Test(groups = "short") @CassandraVersion("2.0.0") public void should_log_non_null_positional_parameter_simple_statements() throws Exception { // given normal.setLevel(TRACE); queryLogger = QueryLogger.builder().build(); cluster().register(queryLogger); // when String query = "UPDATE test SET c_text = ? WHERE pk = ?"; SimpleStatement ss = new SimpleStatement(query, "foo", 42); session().execute(ss); // then String line = normalAppender.waitAndGet(10000); assertThat(line) .contains("Query completed normally") .contains(ipOfNode(1)) .contains(query) .contains("42") .contains("'foo'"); }
@Test(groups = "short") public void should_truncate_query_when_max_length_exceeded() throws Exception { // given normal.setLevel(DEBUG); queryLogger = QueryLogger.builder().withMaxQueryStringLength(5).build(); cluster().register(queryLogger); // when String query = "SELECT * FROM test WHERE pk = 42"; session().execute(query); // then String line = normalAppender.waitAndGet(10000); assertThat(line) .contains("Query completed normally") .contains(ipOfNode(1)) .contains("SELEC" + TRUNCATED_OUTPUT) .doesNotContain(query); }
@Test(groups = "short") public void should_not_truncate_query_when_max_length_unlimited() throws Exception { // given normal.setLevel(DEBUG); queryLogger = QueryLogger.builder().withMaxQueryStringLength(-1).build(); cluster().register(queryLogger); // when String query = "SELECT * FROM test WHERE pk = 42"; session().execute(query); // then String line = normalAppender.waitAndGet(10000); assertThat(line) .contains("Query completed normally") .contains(ipOfNode(1)) .contains(query) .doesNotContain(TRUNCATED_OUTPUT); }
@Test(groups = "short") @CassandraVersion("2.0.0") public void should_log_all_parameters_when_max_unlimited_simple_statements() throws Exception { // given normal.setLevel(TRACE); queryLogger = QueryLogger.builder().withMaxLoggedParameters(-1).build(); cluster().register(queryLogger); // when String query = "UPDATE test SET c_int = ? WHERE pk = ?"; SimpleStatement ss = new SimpleStatement(query, 123456, 42); session().execute(ss); // then String line = normalAppender.waitAndGet(10000); assertThat(line) .contains("Query completed normally") .contains(ipOfNode(1)) .contains("123456") .contains("42"); }
@Test(groups = "short") public void should_log_queries_beyond_constant_threshold() throws Exception { // given slow.setLevel(DEBUG); queryLogger = builder().withConstantThreshold(10).build(); cluster.register(queryLogger); String query = "SELECT foo FROM bar"; primingClient.prime( queryBuilder().withQuery(query).withThen(then().withFixedDelay(100L)).build()); // when session.execute(query); // then String line = slowAppender.waitAndGet(5000); assertThat(line).contains("Query too slow").contains(ip).contains(query); }
@Test(groups = "short") @CassandraVersion("2.0.0") public void should_not_log_exceeding_number_of_parameters_simple_statements() throws Exception { // given normal.setLevel(TRACE); queryLogger = QueryLogger.builder().withMaxLoggedParameters(1).build(); cluster().register(queryLogger); // when String query = "UPDATE test SET c_int = ? WHERE pk = ?"; SimpleStatement ss = new SimpleStatement(query, 123456, 42); session().execute(ss); // then String line = normalAppender.waitAndGet(10000); assertThat(line) .contains("Query completed normally") .contains(ipOfNode(1)) .contains("123456") .doesNotContain("123456, 42") .contains(FURTHER_PARAMS_OMITTED); }
@Test(groups = "short") @CassandraVersion("2.0.0") public void should_truncate_blob_parameter_when_max_length_exceeded_simple_statements() throws Exception { // given normal.setLevel(TRACE); queryLogger = QueryLogger.builder().withMaxParameterValueLength(6).build(); cluster().register(queryLogger); // when String query = "UPDATE test SET c_blob = ? WHERE pk = ?"; SimpleStatement ss = new SimpleStatement(query, ByteBuffer.wrap(Bytes.toArray(Lists.newArrayList(1, 2, 3))), 42); session().execute(ss); // then String line = normalAppender.waitAndGet(10000); assertThat(line) .contains("Query completed normally") .contains(ipOfNode(1)) .contains("0x0102" + TRUNCATED_OUTPUT) .doesNotContain("0x010203"); }
@CassandraVersion("2.0.0") @Test(groups = "short") public void should_truncate_parameter_when_max_length_exceeded_simple_statements() throws Exception { // given normal.setLevel(TRACE); queryLogger = QueryLogger.builder().withMaxParameterValueLength(5).build(); cluster().register(queryLogger); // when String query = "UPDATE test SET c_int = ? WHERE pk = ?"; SimpleStatement ss = new SimpleStatement(query, 123456, 42); session().execute(ss); // then String line = normalAppender.waitAndGet(10000); assertThat(line) .contains("Query completed normally") .contains(ipOfNode(1)) .contains("12345" + TRUNCATED_OUTPUT) .doesNotContain("123456"); }
@Test(groups = "short") public void should_log_bound_statements() throws Exception { // given normal.setLevel(DEBUG); queryLogger = QueryLogger.builder().withConstantThreshold(Long.MAX_VALUE).build(); cluster().register(queryLogger); String query = "SELECT * FROM test where pk = ?"; PreparedStatement ps = session().prepare(query); BoundStatement bs = ps.bind(42); session().execute(bs); // then String line = normalAppender.waitAndGet(10000); assertThat(line) .contains("Query completed normally") .contains(ipOfNode(1)) .contains(query) .doesNotContain("actual parameters"); }
@Test(groups = "short") @CassandraVersion("2.0.0") public void should_not_truncate_parameter_when_max_length_unlimited_simple_statements() throws Exception { // given normal.setLevel(TRACE); queryLogger = QueryLogger.builder().withMaxParameterValueLength(-1).build(); cluster().register(queryLogger); // when String query = "UPDATE test SET c_int = ? WHERE pk = ?"; SimpleStatement ss = new SimpleStatement(query, 123456, 42); session().execute(ss); // then String line = normalAppender.waitAndGet(10000); assertThat(line) .contains("Query completed normally") .contains(ipOfNode(1)) .contains("123456") .doesNotContain(TRUNCATED_OUTPUT); }
@Test(groups = "short") public void should_log_all_parameter_types_bound_statements() throws Exception { // given normal.setLevel(TRACE); queryLogger = QueryLogger.builder().withMaxParameterValueLength(Integer.MAX_VALUE).build(); cluster().register(queryLogger); // when String query = "UPDATE test SET " + assignments + " WHERE pk = 42"; PreparedStatement ps = session().prepare(query); BoundStatement bs = ps.bind(values.toArray()); session().execute(bs); // then String line = normalAppender.waitAndGet(10000); assertThat(line).contains("Query completed normally").contains(ipOfNode(1)).contains(query); CodecRegistry codecRegistry = cluster().getConfiguration().getCodecRegistry(); for (DataType type : dataTypes) { TypeCodec<Object> codec = codecRegistry.codecFor(type); assertThat(line).contains(codec.format(getFixedValue(type))); } }
@Test(groups = "long") public void should_receive_events_when_node_states_change() throws InterruptedException { TestListener listener = new TestListener(); cluster().register(listener); listener.setExpectedEvent(ADD); ccm().add(2); ccm().start(2); listener.waitForEvent(); listener.setExpectedEvent(DOWN); ccm().forceStop(1); listener.waitForEvent(); listener.setExpectedEvent(UP); ccm().start(1); listener.waitForEvent(); listener.setExpectedEvent(REMOVE); ccm().decommission(2); listener.waitForEvent(); }