schema_registry 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 123c56978eca9e032fb3031fd89fad4a8845a81b
4
- data.tar.gz: e40bb00dcccdc774a9517f38763e1dfea2e9e4f0
3
+ metadata.gz: 58117d0b752d254049962f942bdc029e51d95119
4
+ data.tar.gz: 7d101a19c3912c71484834b6ff1f02492349baa6
5
5
  SHA512:
6
- metadata.gz: 23e48444ab0c919fa9f1ed578a98b5fbfffcc6a0ef64f8c6e6dcb5dd2caf0a5911d31b94292cf7d7a94a19600cf15c16048c833c3e15f5183b0d77182f3306f1
7
- data.tar.gz: 56063fd8b4b087ef2121dc2b202ff105b8cb1f5a22bf7f5bcd4b179a0815b1af8e12b8a06f37333f6bda344bdb3d09d80ae996bf02ba457f567e0b8d13503d2b
6
+ metadata.gz: 7e087a0cd8bb28d9f56c69c02975c5fc20bab199f118ad653c9475438cd4528d83725252d26829eb2f09b9ce6cf1489120a4a5d71d9234775b695f104faf1138
7
+ data.tar.gz: b2c94029b386207e910fccb5d0759142dc6325be39b3e79ea551ddb7f016e5bd60fefb9aa252a80eeafe5513d5a86fa013223a2bf7299406413b024e7041b419
data/.gitignore CHANGED
@@ -1,3 +1,4 @@
1
+ /confluent/
1
2
  /.bundle/
2
3
  /.yardoc
3
4
  /Gemfile.lock
@@ -0,0 +1,24 @@
1
+ language: ruby
2
+ sudo: false
3
+
4
+ rvm:
5
+ - "2.0"
6
+ - "2.1"
7
+ - "2.2"
8
+
9
+ env:
10
+ global:
11
+ SCHEMA_REGISTRY_URL: "http://localhost:8081"
12
+
13
+ before_script:
14
+ - make confluent/start
15
+
16
+ after_script:
17
+ - make confluent/stop
18
+
19
+ before_cache:
20
+ - rm -rf confluent/logs
21
+
22
+ cache:
23
+ directories:
24
+ - confluent
@@ -0,0 +1,51 @@
1
+ .PHONY: confluent/kafka/* confluent/zookeeper/* confluent/registry/* confluent/start confluent/stop
2
+
3
+ # Confluent platform tasks
4
+
5
+ confluent/start: confluent/rest/start
6
+
7
+ confluent/stop: confluent/rest/stop confluent/registry/stop confluent/kafka/stop confluent/zookeeper/stop
8
+
9
+ # Download & extract tasks
10
+
11
+ confluent/confluent.tgz:
12
+ mkdir -p confluent && wget http://packages.confluent.io/archive/1.0/confluent-1.0-2.10.4.tar.gz -O confluent/confluent.tgz
13
+
14
+ confluent/EXTRACTED: confluent/confluent.tgz
15
+ tar xzf confluent/confluent.tgz -C confluent --strip-components 1 && touch confluent/EXTRACTED
16
+
17
+ # Zookeeper tasks
18
+
19
+ confluent/zookeeper/start: confluent/EXTRACTED
20
+ nohup confluent/bin/zookeeper-server-start confluent/etc/kafka/zookeeper.properties 2> log/zookeeper.err > log/zookeeper.out < /dev/null &
21
+ while ! nc localhost 2181 </dev/null; do echo "Waiting for zookeeper..."; sleep 1; done
22
+
23
+ confluent/zookeeper/stop: confluent/EXTRACTED
24
+ confluent/bin/zookeeper-server-stop
25
+
26
+ # Kafka tasks
27
+
28
+ confluent/kafka/start: confluent/zookeeper/start confluent/EXTRACTED
29
+ nohup confluent/bin/kafka-server-start confluent/etc/kafka/server.properties 2> log/kafka.err > log/kafka.out < /dev/null &
30
+ while ! nc localhost 9092 </dev/null; do echo "Waiting for Kafka..."; sleep 1; done
31
+
32
+ confluent/kafka/stop: confluent/EXTRACTED
33
+ confluent/bin/kafka-server-stop
34
+
35
+ # schema-registry tasks
36
+
37
+ confluent/registry/start: confluent/kafka/start confluent/EXTRACTED
38
+ nohup confluent/bin/schema-registry-start confluent/etc/schema-registry/schema-registry.properties 2> log/schema-registry.err > log/schema-registry.out < /dev/null &
39
+ while ! nc localhost 8081 </dev/null; do echo "Waiting for schema registry..."; sleep 1; done
40
+
41
+ confluent/registry/stop: confluent/EXTRACTED
42
+ confluent/bin/kafka-server-stop
43
+
44
+ # REST proxy tasks
45
+
46
+ confluent/rest/start: confluent/registry/start confluent/EXTRACTED
47
+ nohup confluent/bin/kafka-rest-start confluent/etc/kafka-rest/kafka-rest.properties 2> log/kafka-rest.err > log/kafka-rest.out < /dev/null &
48
+ while ! nc localhost 8082 </dev/null; do echo "Waiting for REST proxy..."; sleep 1; done
49
+
50
+ confluent/rest/stop: confluent/EXTRACTED
51
+ confluent/bin/kafka-rest-stop
data/Rakefile CHANGED
@@ -1,2 +1,10 @@
1
1
  require "bundler/gem_tasks"
2
+ require "rake/testtask"
3
+
4
+ Rake::TestTask.new('test') do |t|
5
+ t.libs << 'lib' << 'test'
6
+ t.test_files = FileList['test/**/*.rb']
7
+ end
8
+
9
+ task :default => :test
2
10
 
@@ -7,10 +7,12 @@ module SchemaRegistry
7
7
 
8
8
  def initialize(code, message)
9
9
  @code = code
10
- super(message)
10
+ super("#{message} (error code #{code})")
11
11
  end
12
12
  end
13
13
 
14
+ InvalidResponse = Class.new(SchemaRegistry::Error)
15
+
14
16
  RESPONSE_ERROR_CODES = {
15
17
  40401 => (SubjectNotFound = Class.new(SchemaRegistry::ResponseError)),
16
18
  40402 => (VersionNotFound = Class.new(SchemaRegistry::ResponseError)),
@@ -19,6 +21,7 @@ module SchemaRegistry
19
21
  42202 => (InvalidVersion = Class.new(SchemaRegistry::ResponseError)),
20
22
  42203 => (InvalidCompatibilityLevel = Class.new(SchemaRegistry::ResponseError)),
21
23
  409 => (IncompatibleAvroSchema = Class.new(SchemaRegistry::ResponseError)),
24
+ 403 => (UnauthorizedRequest = Class.new(SchemaRegistry::ResponseError)),
22
25
  }
23
26
 
24
27
  class Client
@@ -69,12 +72,25 @@ module SchemaRegistry
69
72
  request.body = JSON.dump(body)
70
73
  end
71
74
 
72
- response = http.request(request)
73
- response_data = JSON.parse(response.body)
74
- case response
75
- when Net::HTTPSuccess;
76
- response_data
75
+ case response = http.request(request)
76
+ when Net::HTTPSuccess
77
+ begin
78
+ JSON.parse(response.body)
79
+ rescue JSON::ParserError => e
80
+ raise SchemaRegistry::InvalidResponse, "Invalid JSON in response: #{e.message}"
81
+ end
82
+
83
+ when Net::HTTPForbidden
84
+ message = username.nil? ? "Unauthorized" : "User `#{username}` failed to authenticate"
85
+ raise SchemaRegistry::UnauthorizedRequest.new(response.code.to_i, message)
86
+
77
87
  else
88
+ response = begin
89
+ JSON.parse(response.body)
90
+ rescue JSON::ParserError => e
91
+ raise SchemaRegistry::InvalidResponse, "Invalid JSON in response: #{e.message}"
92
+ end
93
+
78
94
  error_class = RESPONSE_ERROR_CODES[response_data['error_code']] || SchemaRegistry::ResponseError
79
95
  raise error_class.new(response_data['error_code'], response_data['message'])
80
96
  end
@@ -1,3 +1,3 @@
1
1
  module SchemaRegistry
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
@@ -0,0 +1,2 @@
1
+ *.out
2
+ *.err
@@ -3,16 +3,14 @@ require 'test_helper'
3
3
  class SchemaRegistryTest < Minitest::Test
4
4
 
5
5
  def setup
6
- raise "The SCHEMA_REGISTRY_URI environment variable must be set" if ENV['SCHEMA_REGISTRY_URI'].nil?
7
- @client = SchemaRegistry::Client.new(ENV['SCHEMA_REGISTRY_URI'])
6
+ registry_url = ENV['SCHEMA_REGISTRY_URL'] || "http://localhost:8081"
7
+ @client = SchemaRegistry::Client.new(registry_url)
8
8
  end
9
9
 
10
10
  def test_global_compatibility_level
11
11
  old_level = @client.default_compatibility_level
12
- assert_equal SchemaRegistry::Compatibility::BACKWARD, old_level
13
12
 
14
13
  @client.default_compatibility_level = SchemaRegistry::Compatibility::FULL
15
-
16
14
  current_level = @client.default_compatibility_level
17
15
  assert_equal current_level, SchemaRegistry::Compatibility::FULL
18
16
  ensure
@@ -23,14 +21,14 @@ class SchemaRegistryTest < Minitest::Test
23
21
  schema = schema_fixture('test', 1)
24
22
 
25
23
  subject = @client.subject('test.schema_registry')
26
- schema_id = subject.update_schema(schema)
24
+ schema_id = subject.register_schema(schema)
27
25
  assert schema_id > 0
28
26
 
29
27
  assert_equal ['test.schema_registry'], @client.subjects.map(&:name)
30
28
 
31
29
  registered_schema = @client.schema(schema_id)
32
30
  schema_info = subject.verify_schema(schema)
33
- assert_equal schema_id, schema_info['id']
31
+ assert_equal schema_id, schema_info.id
34
32
 
35
33
  assert_equal Avro::Schema.parse(schema), Avro::Schema.parse(registered_schema)
36
34
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: schema_registry
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Willem van Bergen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-04-15 00:00:00.000000000 Z
11
+ date: 2015-04-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -76,14 +76,17 @@ extensions: []
76
76
  extra_rdoc_files: []
77
77
  files:
78
78
  - .gitignore
79
+ - .travis.yml
79
80
  - Gemfile
80
81
  - LICENSE.txt
82
+ - Makefile
81
83
  - README.md
82
84
  - Rakefile
83
85
  - lib/schema_registry.rb
84
86
  - lib/schema_registry/client.rb
85
87
  - lib/schema_registry/subject.rb
86
88
  - lib/schema_registry/version.rb
89
+ - log/.gitignore
87
90
  - schema_registry.gemspec
88
91
  - test/fixtures/schemas/test-v1.avsc
89
92
  - test/functional/schema_registry_test.rb