Plugin test failing

This might be a stupid question, but I can't seem to figure it out.

I'm trying to write a filter plugin for logstash and started by generating the default "Hello, world!" plugin and going through the basic development process. But I get stuck when running the rspec testing process.

These are the steps I followed:

  1. Downloaded logstash to my local machine from https://www.elastic.co/downloads/logstash.

  2. Ran the bin/logstash-plugin generate --type filter --name new-plugin --path <path to a new repo I created>

  3. Figured out that I needed JRuby, so I installed rvm then ran rvm install jruby and rvm use jruby.

  4. Finally got bundle install working.

  5. Woops! I still need rspec so I gem install rspec.

  6. Run bundle exec rspec, but I get the following result:

    1) LogStash::Filters::CleanJob Set to Hello World "{"message":"some text"}" when processed
        Got 0 failures and 2 other errors:
    
        1.1) Failure/Error: expect(subject).to include("message")
            
            NameError:
                undefined local variable or method `job_1' for #<LogStashHelper::TestPipeline:0x4975dda1>
            # (eval):8:in `<eval>'
            # <my-dir>/.rvm/gems/jruby-9.2.0.0/gems/logstash-core-5.6.4-java/lib/logstash/pipeline.rb:75:in `initialize'
            # <my-dir>/.rvm/gems/jruby-9.2.0.0/gems/logstash-core-5.6.4-java/lib/logstash/pipeline.rb:165:in `initialize'
            # <my-dir>/.rvm/gems/jruby-9.2.0.0/gems/logstash-devutils-1.3.6-java/lib/logstash/devutils/rspec/logstash_helpers.rb:134:in \`new_pipeline_from_string'
            # <my-dir>/.rvm/gems/jruby-9.2.0.0/gems/logstash-devutils-1.3.6-java/lib/logstash/devutils/rspec/logstash_helpers.rb:39:in `block in pipeline'
            # <my-dir>/.rvm/gems/jruby-9.2.0.0/gems/logstash-devutils-1.3.6-java/lib/logstash/devutils/rspec/logstash_helpers.rb:50:in `block in results'
            # <my-dir>/.rvm/gems/jruby-9.2.0.0/gems/logstash-devutils-1.3.6-java/lib/logstash/devutils/rspec/logstash_helpers.rb:68:in `block in subject'
            # ./spec/filters/clean-job_spec.rb:16:in `block in (root)'
            # <my-dir>/.rvm/gems/jruby-9.2.0.0/gems/rspec-wait-0.0.9/lib/rspec/wait.rb:46:in `block in (root)'
    
        1.2) Failure/Error: Unable to find (eval) to read failed line
            
            NameError:
                undefined local variable or method `job_1' for #<LogStashHelper::TestPipeline:0x5882b202>
            # (eval):8:in `<eval>'
            # <my-dir>/.rvm/gems/jruby-9.2.0.0/gems/logstash-core-5.6.4-java/lib/logstash/pipeline.rb:75:in `initialize'
            # <my-dir>/.rvm/gems/jruby-9.2.0.0/gems/logstash-core-5.6.4-java/lib/logstash/pipeline.rb:165:in `initialize'
            # <my-dir>/.rvm/gems/jruby-9.2.0.0/gems/logstash-devutils-1.3.6-java/lib/logstash/devutils/rspec/logstash_helpers.rb:134:in `new_pipeline_from_string'
            # <my-dir>/.rvm/gems/jruby-9.2.0.0/gems/logstash-devutils-1.3.6-java/lib/logstash/devutils/rspec/logstash_helpers.rb:39:in `block in pipeline'
            # <my-dir>/.rvm/gems/jruby-9.2.0.0/gems/logstash-devutils-1.3.6-java/lib/logstash/devutils/rspec/logstash_helpers.rb:65:in `block in sample'
            # <my-dir>/.rvm/gems/jruby-9.2.0.0/gems/rspec-wait-0.0.9/lib/rspec/wait.rb:46:in `block in (root)'
    

What could be causing this?

Thanks

What does the generated code look like?

I just updated the config files. I messed a bit with the *_spec.rb file, but didn't get it to work.

lib/logstash/filters/clean-job.rb

# encoding: utf-8
require "logstash/filters/base"
require "logstash/namespace"

# This  filter will replace the contents of the default 
# message field with whatever you specify in the configuration.
#
# It is only intended to be used as an .
class LogStash::Filters::CleanJob < LogStash::Filters::Base

# Setting the config_name here is required. This is how you
# configure this filter from your Logstash config.
#
# filter {
#    {
#     message => "My message..."
#   }
# }
#
config_name "clean-job"

# Replace the message with this value.
config :message, :validate => :string, :default => "Hello World!"


public
def register
    # Add instance variables 
end # def register

public
def filter(event)

    if @message
    # Replace the event message with our message as configured in the
    # config file.
    event.set("message", @message)
    end

    # filter_matched should go in the last line of our successful code
    filter_matched(event)
end # def filter
end # class LogStash::Filters::CleanJob

spec/filters/clean-job_spec.rb

# encoding: utf-8
require_relative '../spec_helper'
require "logstash/filters/clean-job"

describe LogStash::Filters::CleanJob do
describe "Set to Hello World" do
    let(:config) do <<-CONFIG
    filter {
        clean-job {
        message => "Hello World"
        }
    }
    CONFIG
    end
    
    sample("message" => "some text") do
    expect(subject).to include("message")
    expect(subject.get('message')).to eq('Hello World')
    end
end
end

logstash-filter-clean-job.gemspec

Gem::Specification.new do |s|
s.name          = 'logstash-filter-clean-job'
s.version       = '0.1.0'
s.licenses      = ['Apache-2.0']
s.summary       = 'A summary'
s.description   = 'A description'
s.homepage      = 'https://homepage.com'
s.authors       = ['mandi']
s.email         = 'mandi@email.com'
s.require_paths = ['lib']

# Files
s.files = Dir['lib/**/*','spec/**/*','vendor/**/*','*.gemspec','*.md','CONTRIBUTORS','Gemfile','LICENSE','NOTICE.TXT']
# Tests
s.test_files = s.files.grep(%r{^(test|spec|features)/})

# Special flag to let us know this is actually a logstash plugin
s.metadata = { "logstash_plugin" => "true", "logstash_group" => "filter" }

# Gem dependencies
s.add_runtime_dependency "logstash-core-plugin-api", "~> 2.0"
s.add_development_dependency 'logstash-devutils'
end

Gemfile

source 'https://rubygems.org'

gemspec

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.