logstash-input-dynamodb 1.0.4-java → 2.0.0-java

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,40 +0,0 @@
1
- Gem::Specification.new do |s|
2
- s.name = 'logstash-input-dynamodb'
3
- s.version = '1.0.4'
4
- s.licenses = ['Apache License (2.0)']
5
- s.summary = "This input plugin scans a specified DynamoDB table and then reads changes to a DynamoDB table from the associated DynamoDB Stream."
6
- s.description = "This gem is a logstash plugin required to be installed on top of the Logstash core pipeline using $LS_HOME/bin/plugin install gemname. This gem is not a stand-alone program"
7
- s.authors = ["Amazon"]
8
- s.email = 'dynamodb-interest@amazon.com'
9
- s.homepage = "https://github.com/logstash-plugins/logstash-input-dynamodb"
10
- s.require_paths = ["lib"]
11
- s.platform = 'java'
12
-
13
- # Files
14
- s.files = `git ls-files`.split($\)
15
- # Tests
16
- s.test_files = s.files.grep(%r{^(test|spec|features)/})
17
-
18
- # Special flag to let us know this is actually a logstash plugin
19
- s.metadata = { "logstash_plugin" => "true", "logstash_group" => "input" }
20
-
21
- # Gem dependencies
22
- s.add_runtime_dependency "logstash-core", '< 2.0.0'
23
- s.add_runtime_dependency "logstash-codec-json", '< 2.0.0'
24
- s.add_runtime_dependency "activesupport-json_encoder"
25
- # Jar dependencies
26
- s.requirements << "jar 'org.apache.httpcomponents:httpclient', '4.5.2'"
27
- s.requirements << "jar 'com.amazonaws:amazon-kinesis-client', '1.6.1'"
28
- s.requirements << "jar 'log4j:log4j', '1.2.17'"
29
- s.requirements << "jar 'com.amazonaws:aws-java-sdk-dynamodb', '1.10.60'"
30
- s.requirements << "jar 'com.amazonaws:aws-java-sdk-core', '1.10.60'"
31
- s.requirements << "jar 'com.amazonaws:aws-java-sdk-kinesis', '1.10.60'"
32
- s.requirements << "jar 'com.amazonaws:dynamodb-import-export-tool', '1.0.0'"
33
- s.requirements << "jar 'commons-logging:commons-logging', '1.1.3'"
34
- s.requirements << "jar 'com.amazonaws:dynamodb-streams-kinesis-adapter', '1.0.2'"
35
- s.requirements << "jar 'com.google.guava:guava', '15.0'"
36
- s.add_runtime_dependency 'jar-dependencies'
37
- # Development dependencies
38
- s.add_development_dependency "logstash-devutils"
39
- s.add_development_dependency "mocha"
40
- end
@@ -1,198 +0,0 @@
1
- # encoding: utf-8
2
- #
3
- #Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved.
4
- #
5
- #Licensed under the Apache License, Version 2.0 (the "License");
6
- #you may not use this file except in compliance with the License.
7
- #You may obtain a copy of the License at
8
- #
9
- # http://www.apache.org/licenses/LICENSE-2.0
10
- #
11
- #Unless required by applicable law or agreed to in writing, software
12
- #distributed under the License is distributed on an "AS IS" BASIS,
13
- #WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
- #See the License for the specific language governing permissions and
15
- #limitations under the License.
16
- #
17
- require "spec/spec_helper"
18
-
19
- class LogStash::Inputs::TestDynamoDB < LogStash::Inputs::DynamoDB
20
- default :codec, 'json'
21
-
22
- private
23
- def shutdown_count
24
- @shutdown_count ||= 0
25
- end
26
-
27
- def queue_event(event, logstash_queue, host)
28
- super(event, logstash_queue, host)
29
- # Add additional item to plugin's queue to ensure run() flushes queue before shutting down.
30
- # Queue the event and then shutdown, otherwise the threads would run forever
31
- if shutdown_count == 0
32
- @shutdown_count += 1
33
- @queue << "additional event stuck in queue during shutdown"
34
- raise LogStash::ShutdownSignal
35
- end
36
- end
37
-
38
- def start_kcl_thread()
39
- @queue << "some message from kcl thread calling process"
40
- end
41
- end
42
-
43
- class TestParser
44
-
45
- def parse_scan(msg)
46
- return msg
47
- end
48
-
49
- def parse_stream(msg)
50
- return msg
51
- end
52
-
53
- end
54
-
55
- describe 'inputs/dynamodb' do
56
- let (:dynamodb_client) {mock("AmazonDynamoDB::AmazonDynamoDBClient")}
57
- let (:dynamodb_streams_client) {mock("AmazonDynamoDB::AmazonDynamoDBStreamsClient")}
58
- let (:adapter) {mock("AmazonDynamoDB::AmazonDynamoDBStreamsAdapterClient")}
59
- let (:parser) {mock("DynamoDBLogParser")}
60
- let (:region_utils) {mock("RegionUtils")}
61
-
62
- def allow_invalid_credentials(stream_status = "ENABLED", error_to_raise = nil)
63
- AmazonDynamoDB::AmazonDynamoDBClient.expects(:new).returns(dynamodb_client)
64
- AmazonDynamoDB::AmazonDynamoDBStreamsClient.expects(:new).returns(dynamodb_streams_client)
65
- AmazonDynamoDB::AmazonDynamoDBStreamsAdapterClient.expects(:new).returns(adapter)
66
- Logstash::Inputs::DynamoDB::DynamoDBLogParser.expects(:new).returns(TestParser.new())
67
- RegionUtils.expects(:getRegionByEndpoint).with("some endpoint").returns("some region")
68
-
69
- mock_table_description = stub
70
- mock_table = stub
71
- mock_key_schema = stub
72
- mock_iterator = stub
73
- mock_describe_stream = stub
74
- mock_stream_description = stub
75
- unless error_to_raise.nil?
76
- dynamodb_client.expects(:describeTable).raises(error_to_raise)
77
- return
78
- end
79
-
80
- adapter.expects(:setEndpoint).with("some streams endpoint")
81
- dynamodb_streams_client.expects(:setEndpoint).with("some streams endpoint")
82
- dynamodb_streams_client.expects(:describeStream).returns(mock_describe_stream)
83
- mock_describe_stream.expects(:getStreamDescription).returns(mock_stream_description)
84
- mock_stream_description.expects(:getStreamStatus).returns(stream_status)
85
- mock_stream_description.expects(:getStreamViewType).returns("new_and_old_images")
86
- mock_table.expects(:getLatestStreamArn).returns("test streamId")
87
- dynamodb_client.expects(:setEndpoint)
88
- dynamodb_client.expects(:describeTable).returns(mock_table_description)
89
- mock_table_description.expects(:getTable).returns(mock_table)
90
- mock_table.expects(:getKeySchema).returns(mock_key_schema)
91
- mock_key_schema.expects(:iterator).returns(mock_iterator)
92
- mock_iterator.expects(:hasNext).returns(false)
93
-
94
- end
95
-
96
- it "should not allow empty config" do
97
- expect {LogStash::Plugin.lookup("input", "dynamodb").new(empty_config)}.to raise_error(LogStash::ConfigurationError)
98
- end
99
-
100
- it "should need endpoint" do
101
- config = tablename
102
- config.delete("endpoint")
103
- expect {LogStash::Plugin.lookup("input", "dynamodb").new(config)}.to raise_error(LogStash::ConfigurationError)
104
- end
105
-
106
- it "should need table_name config" do
107
- config = tablename
108
- config.delete("table_name")
109
- expect {LogStash::Plugin.lookup("input", "dynamodb").new(config)}.to raise_error(LogStash::ConfigurationError)
110
- end
111
-
112
- it "should need view_type config" do
113
- config = tablename
114
- config.delete("view_type")
115
- expect {LogStash::Plugin.lookup("input", "dynamodb").new(config)}.to raise_error(LogStash::ConfigurationError)
116
- end
117
-
118
- it "should use default AWS credentials " do
119
- input = LogStash::Plugin.lookup("input", "dynamodb").new(tablename)
120
- expect(input.build_credentials()).to be_an_instance_of(Java::ComAmazonawsAuth::DefaultAWSCredentialsProviderChain)
121
- end
122
-
123
- it "should register correctly" do
124
- input = LogStash::Plugin.lookup("input", "dynamodb").new(invalid_aws_credentials_config)
125
- allow_invalid_credentials()
126
- expect {input.register}.not_to raise_error
127
- end
128
-
129
- it "should create new logstash event with metadata and add to queue" do
130
- input = LogStash::Plugin.lookup("input", "dynamodb").new(invalid_aws_credentials_config)
131
- queue = SizedQueue.new(20)
132
- input.queue_event("some message", queue, "some host")
133
- expect(queue.size()).to eq(1)
134
- event = queue.pop()
135
- expect(event["message"]).to eq("some message")
136
- expect(event["host"]).to eq("some host")
137
- end
138
-
139
- it "should start mock kcl worker thread and receive event from it, then flush additional events stuck in queue before shutting down" do
140
- input = LogStash::Inputs::TestDynamoDB.new(invalid_aws_credentials_config.merge({'perform_scan' => false}))
141
- allow_invalid_credentials()
142
- input.register
143
- queue = SizedQueue.new(20)
144
- input.run queue
145
- expect(queue.size()).to eq(2)
146
- event = queue.pop()
147
- expect(event["message"]).to eq("some message from kcl thread calling process")
148
- event = queue.pop()
149
- expect(event["message"]).to eq("additional event stuck in queue during shutdown")
150
- end
151
-
152
- it "should raise error since no active streams" do
153
- input = LogStash::Plugin.lookup("input", "dynamodb").new(invalid_aws_credentials_config)
154
- allow_invalid_credentials(stream_status="DISABLED")
155
- expect {input.register}.to raise_error(LogStash::PluginLoadingError, "No streams are enabled")
156
- end
157
-
158
- it "should handle error for nonexistent table" do
159
- input = LogStash::Plugin.lookup("input", "dynamodb").new(invalid_aws_credentials_config)
160
- allow_invalid_credentials(error_to_raise=Java::ComAmazonawsServicesDynamodbv2Model::ResourceNotFoundException.new("table does not exist"))
161
- expect {input.register}.to raise_error(LogStash::PluginLoadingError)
162
- end
163
-
164
- it "should allow cloudwatch metrics when specified by user" do
165
- input = LogStash::Inputs::TestDynamoDB.new(invalid_aws_credentials_config.merge({"publish_metrics" => true}))
166
- allow_invalid_credentials()
167
- cloudwatch_mock = mock("Java::ComAmazonawsServicesCloudwatch::AmazonCloudWatchClient")
168
- Java::ComAmazonawsServicesCloudwatch::AmazonCloudWatchClient.expects(:new).returns(cloudwatch_mock)
169
-
170
- input.register
171
- end
172
-
173
- it "should throw error trying to perform scan with old images" do
174
- input = LogStash::Inputs::TestDynamoDB.new(invalid_aws_credentials_config.merge({"view_type" => LogStash::Inputs::DynamoDB::VT_OLD_IMAGE, \
175
- "perform_scan" => true}))
176
- expect {input.register}.to raise_error(LogStash::ConfigurationError)
177
- end
178
-
179
- it "should throw error when view type all images and dynamodb format" do
180
- input = LogStash::Inputs::TestDynamoDB.new(invalid_aws_credentials_config.merge({"view_type" => LogStash::Inputs::DynamoDB::VT_ALL_IMAGES, \
181
- "log_format" => LogStash::Inputs::DynamoDB::LF_DYNAMODB}))
182
- expect {input.register}.to raise_error(LogStash::ConfigurationError)
183
- end
184
-
185
- it "should throw error when view type all images and json_drop_binary format" do
186
- input = LogStash::Inputs::TestDynamoDB.new(invalid_aws_credentials_config.merge({"view_type" => LogStash::Inputs::DynamoDB::VT_ALL_IMAGES, \
187
- "log_format" => LogStash::Inputs::DynamoDB::LF_JSON_NO_BIN}))
188
- expect {input.register}.to raise_error(LogStash::ConfigurationError)
189
- end
190
-
191
- it "should throw error when view type all images and json_binary_as_text format" do
192
- input = LogStash::Inputs::TestDynamoDB.new(invalid_aws_credentials_config.merge({"view_type" => LogStash::Inputs::DynamoDB::VT_ALL_IMAGES, \
193
- "log_format" => LogStash::Inputs::DynamoDB::LF_JSON_BIN_AS_TEXT}))
194
- expect {input.register}.to raise_error(LogStash::ConfigurationError)
195
- end
196
-
197
-
198
- end
@@ -1,63 +0,0 @@
1
- # encoding: utf-8
2
- #
3
- #Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved.
4
- #
5
- #Licensed under the Apache License, Version 2.0 (the "License");
6
- #you may not use this file except in compliance with the License.
7
- #You may obtain a copy of the License at
8
- #
9
- # http://www.apache.org/licenses/LICENSE-2.0
10
- #
11
- #Unless required by applicable law or agreed to in writing, software
12
- #distributed under the License is distributed on an "AS IS" BASIS,
13
- #WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
- #See the License for the specific language governing permissions and
15
- #limitations under the License.
16
- #
17
- require "spec/spec_helper"
18
-
19
- class Logstash::Inputs::DynamoDB::DynamoDBLogParserTest < Logstash::Inputs::DynamoDB::DynamoDBLogParser
20
-
21
- private
22
- def calculate_key_size_in_bytes(record)
23
- return 10
24
- end
25
-
26
- end
27
-
28
- describe "inputs/LogParser" do
29
- let (:object_mapper) {mock("ObjectMapper")}
30
-
31
- before(:each) do
32
- Java::comFasterxmlJacksonDatabind::ObjectMapper.expects(:new).returns(object_mapper)
33
- object_mapper.expects(:setSerializationInclusion)
34
- object_mapper.expects(:addMixInAnnotations)
35
- end
36
-
37
- def expect_parse_stream()
38
- object_mapper.expects(:writeValueAsString).with(sample_stream_result).returns(sample_stream_result)
39
- JSON.expects(:parse).with(sample_stream_result).returns(sample_stream_result)
40
- end
41
-
42
- def expect_parse_scan()
43
- object_mapper.expects(:writeValueAsString).with(sample_scan_result).returns(sample_scan_result)
44
- JSON.expects(:parse).with(sample_scan_result).returns(sample_scan_result)
45
- end
46
-
47
- it "should parse a scan and parse a stream the same way" do
48
- expect_parse_stream
49
- expect_parse_scan
50
- parser = Logstash::Inputs::DynamoDB::DynamoDBLogParserTest.new(LogStash::Inputs::DynamoDB::VT_ALL_IMAGES, LogStash::Inputs::DynamoDB::LF_PLAIN, key_schema, "us-west-1")
51
- scan_after_parse = parser.parse_scan(sample_scan_result, 38)
52
- stream_after_parse = parser.parse_stream(sample_stream_result)
53
- expect(scan_after_parse).to eq(stream_after_parse)
54
- end
55
-
56
- it "should drop binary values when parsing into a json with the correct configuration" do
57
- expect_parse_scan
58
- parser = Logstash::Inputs::DynamoDB::DynamoDBLogParserTest.new(LogStash::Inputs::DynamoDB::VT_NEW_IMAGE, LogStash::Inputs::DynamoDB::LF_JSON_NO_BIN, key_schema, "us-west-1")
59
- result = parser.parse_scan(sample_scan_result, 38)
60
- expect(result).to eq({"TBCZDPHPXUTOTYGP" => "sampleString"}.to_json)
61
- end
62
-
63
- end
@@ -1,70 +0,0 @@
1
- # encoding: utf-8
2
- #
3
- #Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved.
4
- #
5
- #Licensed under the Apache License, Version 2.0 (the "License");
6
- #you may not use this file except in compliance with the License.
7
- #You may obtain a copy of the License at
8
- #
9
- # http://www.apache.org/licenses/LICENSE-2.0
10
- #
11
- #Unless required by applicable law or agreed to in writing, software
12
- #distributed under the License is distributed on an "AS IS" BASIS,
13
- #WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
- #See the License for the specific language governing permissions and
15
- #limitations under the License.
16
- #
17
- require "spec/spec_helper"
18
-
19
- describe 'inputs/LogStashRecordProcessor' do
20
- before(:each) do
21
- @queue = SizedQueue.new(20)
22
- @processor = Logstash::Inputs::DynamoDB::LogStashRecordProcessor.new(@queue)
23
- end
24
-
25
- it "should call setShardId when being called with a String" do
26
- processor_with_shard = Logstash::Inputs::DynamoDB::LogStashRecordProcessor.new("test shardId")
27
- expect(processor_with_shard.shard_id).to eq("test shardId")
28
- end
29
-
30
- it "should not call setShardId when being called with a queue" do
31
- expect(@processor.queue).to eq(@queue)
32
- expect(@processor.shard_id).to be_nil
33
- end
34
-
35
- it "should checkpoint when shutdown is called with reason TERMINATE" do
36
- checkpointer = mock("checkpointer")
37
- checkpointer.expects(:checkpoint).once
38
- @processor.shutdown(checkpointer, ShutdownReason::TERMINATE)
39
- end
40
-
41
- it "should not checkpoint when shutdown is called with reason ZOMBIE" do
42
- checkpointer = mock("checkpointer")
43
- checkpointer.expects(:checkpoint).never
44
- @processor.shutdown(checkpointer, ShutdownReason::ZOMBIE)
45
- end
46
-
47
- it "should raise error when shutdown is called with unknown reason" do
48
- expect {@processor.shutdown("some checkpointer", "unknown reason")}.to raise_error(RuntimeError)
49
- end
50
-
51
- it "should translate each record into String, push them onto queue, and then checkpoint when process_records is called" do
52
- checkpointer = mock("checkpointer")
53
- checkpointer.expects(:checkpoint).once
54
-
55
- records = [{"a records data" => "a records value"}, {"another records data" => "another records value"}]
56
- @processor.process_records(records, checkpointer)
57
- end
58
-
59
- end
60
-
61
- describe 'inputs/LogStashRecordProcessorFactory' do
62
-
63
- it "should create a new factory correctly and create a new LogStashRecordProcessor when called upon" do
64
- queue = SizedQueue.new(20)
65
- factory = Logstash::Inputs::DynamoDB::LogStashRecordProcessorFactory.new(queue)
66
- processor = factory.create_processor
67
- expect(processor).to be_an_instance_of(Logstash::Inputs::DynamoDB::LogStashRecordProcessor)
68
- end
69
-
70
- end
data/spec/spec_helper.rb DELETED
@@ -1,134 +0,0 @@
1
- # This file was generated by the `rspec --init` command. Conventionally, all
2
- # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
3
- # The generated `.rspec` file contains `--require spec_helper` which will cause
4
- # this file to always be loaded, without a need to explicitly require it in any
5
- # files.
6
- #
7
- # Given that it is always loaded, you are encouraged to keep this file as
8
- # light-weight as possible. Requiring heavyweight dependencies from this file
9
- # will add to the boot time of your test suite on EVERY test run, even for an
10
- # individual file that may not need all of that loaded. Instead, consider making
11
- # a separate helper file that requires the additional dependencies and performs
12
- # the additional setup, and require it from the spec files that actually need
13
- # it.
14
- #
15
- # The `.rspec` file also contains a few flags that are not defaults but that
16
- # users commonly want.
17
- #
18
- # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
19
- RSpec.configure do |config|
20
- # rspec-expectations config goes here. You can use an alternate
21
- # assertion/expectation library such as wrong or the stdlib/minitest
22
- # assertions if you prefer.
23
- config.expect_with :rspec do |expectations|
24
- # This option will default to `true` in RSpec 4. It makes the `description`
25
- # and `failure_message` of custom matchers include text for helper methods
26
- # defined using `chain`, e.g.:
27
- # be_bigger_than(2).and_smaller_than(4).description
28
- # # => "be bigger than 2 and smaller than 4"
29
- # ...rather than:
30
- # # => "be bigger than 2"
31
- expectations.include_chain_clauses_in_custom_matcher_descriptions = true
32
- end
33
-
34
- # rspec-mocks config goes here. You can use an alternate test double
35
- # library (such as bogus or mocha) by changing the `mock_with` option here.
36
- config.mock_with :rspec do |mocks|
37
- # Prevents you from mocking or stubbing a method that does not exist on
38
- # a real object. This is generally recommended, and will default to
39
- # `true` in RSpec 4.
40
- mocks.verify_partial_doubles = true
41
- end
42
-
43
- # The settings below are suggested to provide a good initial experience
44
- # with RSpec, but feel free to customize to your heart's content.
45
- =begin
46
- # These two settings work together to allow you to limit a spec run
47
- # to individual examples or groups you care about by tagging them with
48
- # `:focus` metadata. When nothing is tagged with `:focus`, all examples
49
- # get run.
50
- config.filter_run :focus
51
- config.run_all_when_everything_filtered = true
52
-
53
- # Allows RSpec to persist some state between runs in order to support
54
- # the `--only-failures` and `--next-failure` CLI options. We recommend
55
- # you configure your source control system to ignore this file.
56
- config.example_status_persistence_file_path = "spec/examples.txt"
57
-
58
- # Limits the available syntax to the non-monkey patched syntax that is
59
- # recommended. For more details, see:
60
- # - http://myronmars.to/n/dev-blog/2012/06/rspecs-new-expectation-syntax
61
- # - http://www.teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/
62
- # - http://myronmars.to/n/dev-blog/2014/05/notable-changes-in-rspec-3#new__config_option_to_disable_rspeccore_monkey_patching
63
- config.disable_monkey_patching!
64
-
65
- # This setting enables warnings. It's recommended, but in some cases may
66
- # be too noisy due to issues in dependencies.
67
- config.warnings = true
68
-
69
- # Many RSpec users commonly either run the entire suite or an individual
70
- # file, and it's useful to allow more verbose output when running an
71
- # individual spec file.
72
- if config.files_to_run.one?
73
- # Use the documentation formatter for detailed output,
74
- # unless a formatter has already been configured
75
- # (e.g. via a command-line flag).
76
- config.default_formatter = 'doc'
77
- end
78
-
79
- # Print the 10 slowest examples and example groups at the
80
- # end of the spec run, to help surface which specs are running
81
- # particularly slow.
82
- config.profile_examples = 10
83
-
84
- # Run specs in random order to surface order dependencies. If you find an
85
- # order dependency and want to debug it, you can fix the order by providing
86
- # the seed, which is printed after each run.
87
- # --seed 1234
88
- config.order = :random
89
-
90
- # Seed global randomization in this process using the `--seed` CLI option.
91
- # Setting this allows you to use `--seed` to deterministically reproduce
92
- # test failures related to randomization by passing the same `--seed` value
93
- # as the one that triggered the failure.
94
- Kernel.srand config.seed
95
- =end
96
- end
97
-
98
- require "logstash/devutils/rspec/spec_helper"
99
- require "logstash/inputs/DynamoDBLogParser"
100
- require "logstash/inputs/dynamodb"
101
- require "rspec/expectations"
102
- require "rspec/mocks"
103
- require "mocha"
104
- require "java"
105
-
106
- RSpec.configure do |config|
107
- config.mock_with :mocha
108
- end
109
-
110
- def empty_config
111
- {}
112
- end
113
-
114
- def tablename
115
- {'table_name' => 'test tablename', 'view_type' => "new_and_old_images", "endpoint" => "some endpoint"}
116
- end
117
- def invalid_aws_credentials_config
118
- {'table_name' => 'test tablename', "endpoint" => "some endpoint", 'aws_access_key_id' => 'invalid', 'aws_secret_access_key' => 'invalid_also', 'view_type' => "new_and_old_images", "streams_endpoint" => "some streams endpoint"}
119
- end
120
- def invalid_aws_credentials_config_no_endpoints
121
- {'table_name' => 'test tablename', 'aws_access_key_id' => 'invalid', 'aws_secret_access_key' => 'invalid_also', 'view_type' => "new_and_old_images"}
122
- end
123
- def key_schema
124
- ["TBCZDPHPXUTOTYGP", "some bin key"]
125
- end
126
- def sample_scan_result
127
- {"TBCZDPHPXUTOTYGP" => {"S" => "sampleString"}, "some bin key" => {"B" => "actualbinval"}}
128
- end
129
- def sample_stream_result
130
- {"internalObject" => {"eventID" => "0","eventName" => "INSERT","eventVersion" => "1.0", \
131
- "eventSource" => "aws:dynamodb","awsRegion" => "us-west-1","dynamodb" => {"keys" => {"TBCZDPHPXUTOTYGP" => {"S" => "sampleString"}, \
132
- "some bin key" => {"B" => "actualbinval"}}, "newImage" => {"TBCZDPHPXUTOTYGP" => {"S" => "sampleString"}, \
133
- "some bin key" => {"B" => "actualbinval"}},"sequenceNumber" => "0","sizeBytes" => 48,"streamViewType" => LogStash::Inputs::DynamoDB::VT_ALL_IMAGES.upcase}}}
134
- end