Skip to content

Commit 7b302f8

Browse files
committed
[RUBY-187] Integration tests and cuke features for trigger meta
1 parent bffe1d6 commit 7b302f8

File tree

6 files changed

+118
-1
lines changed

6 files changed

+118
-1
lines changed

features/basics/schema_metadata.feature

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,39 @@ Feature: Schema Metadata
8080
)
8181
"""
8282

83+
Scenario: Getting trigger metadata
84+
Given the following schema:
85+
"""cql
86+
CREATE KEYSPACE simplex WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 3};
87+
CREATE TABLE simplex.test_table (a text primary key, b text);
88+
CREATE TABLE simplex.audit (key timeuuid, keyspace_name text, table_name text, primary_key text, PRIMARY KEY(key));
89+
CREATE TRIGGER trigger1 ON simplex.test_table USING 'org.apache.cassandra.triggers.AuditTrigger';
90+
"""
91+
And the following example:
92+
"""ruby
93+
require 'cassandra'
94+
95+
cluster = Cassandra.cluster
96+
97+
# AuditTrigger is available in cassandra/conf/triggers. See cassandra/examples/triggers in Cassandra
98+
trigger = cluster.keyspace('simplex').table('test_table').trigger('trigger1')
99+
puts trigger.to_cql
100+
101+
puts ""
102+
puts "Name: #{trigger.name}"
103+
puts "Table name: #{trigger.table.name}"
104+
puts "Class: #{trigger.options['class']}"
105+
"""
106+
When it is executed
107+
Then its output should contain:
108+
"""cql
109+
CREATE TRIGGER "trigger1" ON simplex.test_table USING 'org.apache.cassandra.triggers.AuditTrigger';
110+
111+
Name: trigger1
112+
Table name: test_table
113+
Class: org.apache.cassandra.triggers.AuditTrigger
114+
"""
115+
83116
Scenario: Getting index metadata
84117
Given the following schema:
85118
"""cql

integration/metadata_test.rb

Lines changed: 45 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,12 @@ def setup
3939
@session.execute("CREATE TABLE simplex.custom (f1 int PRIMARY KEY," \
4040
" f2 'org.apache.cassandra.db.marshal.CompositeType(org.apache.cassandra.db.marshal.UUIDType,org.apache.cassandra.db.marshal.UTF8Type)')")
4141
@listener.wait_for_table('simplex', 'custom')
42+
@session.execute("CREATE TABLE simplex.test1 (key text, value text, PRIMARY KEY(key))")
43+
@listener.wait_for_table('simplex', 'test1')
44+
@session.execute("CREATE TABLE simplex.test2 (key text, value text, PRIMARY KEY(key))")
45+
@listener.wait_for_table('simplex', 'test2')
46+
@session.execute("CREATE TABLE simplex.audit (key timeuuid, keyspace_name text, table_name text, primary_key text, PRIMARY KEY(key))")
47+
@listener.wait_for_table('simplex', 'audit')
4248
end
4349

4450
def teardown
@@ -63,7 +69,7 @@ def test_can_retrieve_keyspace_metadata
6369
assert_equal 1, ks_meta.replication.options['replication_factor'].to_i
6470
assert ks_meta.durable_writes?
6571
assert ks_meta.has_table?('users')
66-
assert_equal 4, ks_meta.tables.size
72+
assert_equal 7, ks_meta.tables.size
6773

6874
ks_cql = Regexp.new(/CREATE KEYSPACE simplex WITH replication = {'class': 'SimpleStrategy', \
6975
'replication_factor': '1'} AND durable_writes = true;/)
@@ -342,4 +348,42 @@ def test_table_metadata_contains_extensions
342348
assert_empty table_meta.options.extensions
343349
end
344350

351+
# Test for retrieving trigger metadata
352+
#
353+
# test_can_retrieve_trigger_metadata tests that all pieces of trigger metadata can be retrieved. It first creates a
354+
# simple trigger. It then goes through each piece of the trigger metadata and verifies that each piece is as expected.
355+
# It finally creates another trigger with the same name, on a different table and verifies that it is retrieved and
356+
# complete.
357+
#
358+
# @since 3.1.0
359+
# @jira_ticket RUBY-187
360+
# @expected_result trigger metadata should be retrieved.
361+
#
362+
# @test_category metadata
363+
#
364+
def test_can_retrieve_trigger_metadata
365+
skip("Triggers were introduced in Cassandra 2.0") if CCM.cassandra_version < '2.0.0'
366+
367+
# trigger1, on test1 table
368+
@session.execute("CREATE TRIGGER trigger1 ON simplex.test1 USING 'org.apache.cassandra.triggers.AuditTrigger'")
369+
@listener.wait_for_trigger('simplex', 'test1', 'trigger1')
370+
371+
assert @cluster.keyspace('simplex').table('test1').has_trigger?('trigger1')
372+
trigger_meta = @cluster.keyspace('simplex').table('test1').trigger('trigger1')
373+
assert_equal 'trigger1', trigger_meta.name
374+
assert_equal 'test1', trigger_meta.table.name
375+
assert_equal 'org.apache.cassandra.triggers.AuditTrigger', trigger_meta.options['class']
376+
377+
# trigger1, on test2 table
378+
@session.execute("CREATE TRIGGER trigger1 ON simplex.test2 USING 'org.apache.cassandra.triggers.AuditTrigger'")
379+
@listener.wait_for_trigger('simplex', 'test2', 'trigger1')
380+
381+
assert @cluster.keyspace('simplex').table('test2').has_trigger?('trigger1')
382+
trigger_meta2 = @cluster.keyspace('simplex').table('test2').trigger('trigger1')
383+
assert_equal 'trigger1', trigger_meta2.name
384+
assert_equal 'test2', trigger_meta2.table.name
385+
assert_equal 'org.apache.cassandra.triggers.AuditTrigger', trigger_meta2.options['class']
386+
387+
refute_equal trigger_meta, trigger_meta2
388+
end
345389
end

integration/schema_change_listener.rb

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,13 @@ def wait_for_materialized_view(keyspace_name, view_name, *args)
7373
end
7474
end
7575

76+
def wait_for_trigger(keyspace_name, table_name, trigger_name, *args)
77+
self.wait_for_table(keyspace_name, table_name)
78+
wait_for_change(keyspace_name, 2) do |ks|
79+
ks.table(table_name).has_trigger?(trigger_name, *args)
80+
end
81+
end
82+
7683
def keyspace_changed(keyspace)
7784
# This looks a little strange, but here's the idea: if we don't have
7885
# Condition's for this keyspace, immediately return. Otherwise, for each

support/ccm.rb

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -455,6 +455,8 @@ def start(jvm_arg=nil)
455455

456456
options[:load_balancing_policy] = SameOrderLoadBalancingPolicy.new
457457

458+
enable_triggers
459+
458460
total_attempts = 1
459461
until @nodes.all?(&:up?) && @cluster && @cluster.hosts.select(&:up?).count == @nodes.size
460462
attempts = 1
@@ -714,6 +716,17 @@ def change_tombstone_thresholds
714716
start
715717
end
716718

719+
def enable_triggers
720+
trigger_root = File.expand_path(File.dirname(__FILE__) + '/../support/triggers')
721+
ccm_node_conf_dir = "~/.ccm/ruby-driver-cassandra-#{CCM.cassandra_version}-test-cluster"
722+
723+
(1..@nodes.size).each do |n|
724+
`mkdir #{ccm_node_conf_dir}/node#{n}/conf/triggers`
725+
`cp #{trigger_root}/AuditTrigger.properties #{ccm_node_conf_dir}/node#{n}/conf`
726+
`cp #{trigger_root}/trigger-example.jar #{ccm_node_conf_dir}/node#{n}/conf/triggers`
727+
end
728+
end
729+
717730
def setup_schema(schema)
718731
schema.strip!
719732
schema.chomp!(";")
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# encoding: utf-8
2+
3+
#--
4+
# Copyright 2013-2016 DataStax, Inc.
5+
#
6+
# Licensed under the Apache License, Version 2.0 (the "License");
7+
# you may not use this file except in compliance with the License.
8+
# You may obtain a copy of the License at
9+
#
10+
# http://www.apache.org/licenses/LICENSE-2.0
11+
#
12+
# Unless required by applicable law or agreed to in writing, software
13+
# distributed under the License is distributed on an "AS IS" BASIS,
14+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15+
# See the License for the specific language governing permissions and
16+
# limitations under the License.
17+
#++
18+
19+
keyspace=simplex
20+
table=audit
3.23 KB
Binary file not shown.

0 commit comments

Comments
 (0)