flydata 0.3.14 → 0.3.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: de14c5ba0b4b0b3c1b98e93f9e41c59a32db18fd
4
- data.tar.gz: 685e70c882291fe387d7aaf14657a879b8c1d73e
3
+ metadata.gz: 2092338e5191e9b77804e78ba3aef0a667d2fba2
4
+ data.tar.gz: f2f65e5850da6e1e77be386d8b1fdcf4ab3a6a00
5
5
  SHA512:
6
- metadata.gz: c735cbf41f4e9448175bb38c5dac9b5e5365e7a8f9710f86e7399feab2eecd5e018165f2224e8749e8c7169941b33bc1a01e122d7eb1d510056010508c0a793a
7
- data.tar.gz: efc559f6b9536c45078f63b1416fc5da759bbd99249176b51dc15e7ec4016a5dfb5942262db0e4a87d13ba843d90ae00a91a9b731d670881c5467b5b642fac87
6
+ metadata.gz: 693815184571882684724fdf9e0eab6f9f16142c335ddc0e47c2cdcd59adf0d8789ac7113f0796f64cbbd7aad3d2939ac325d13ba1a3bdb565f0b5d82b597df0
7
+ data.tar.gz: a2b9def6f55162b7098d34daa2b881b2919594ab642d772797caa6229d482a2b416fc976ec504010d0f59bd473ed5c2596eecff14112d9f9b072ffe1c0d2b1dc
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.14
1
+ 0.3.15
@@ -2,11 +2,11 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: flydata 0.3.14 ruby lib
5
+ # stub: flydata 0.3.15 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "flydata"
9
- s.version = "0.3.14"
9
+ s.version = "0.3.15"
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
12
  s.require_paths = ["lib"]
@@ -102,24 +102,24 @@ module Flydata
102
102
  def check_mysql_user_compat
103
103
  client = Mysql2::Client.new(@db_opts)
104
104
  grants_sql = "SHOW GRANTS"
105
- correct_db = ["ON (\\*|#{@db_opts[:database]})","TO '#{@db_opts[:username]}"]
105
+ correct_db = ["ON (\\*|(`)?#{@db_opts[:database]}(`)?).","TO '#{@db_opts[:username]}"]
106
106
  necessary_permission_fields= ["SELECT","RELOAD","LOCK TABLES","REPLICATION SLAVE","REPLICATION CLIENT"]
107
107
  all_privileges_field= ["ALL PRIVILEGES"]
108
108
  result = client.query(grants_sql)
109
109
  # Do not catch MySQL connection problem because check should stop if no MySQL connection can be made.
110
110
  client.close
111
- missing_priv = []
111
+ found_priv = []
112
112
  result.each do |res|
113
113
  # SHOW GRANTS should only return one column
114
114
  res_value = res.values.first
115
115
  if correct_db.all? {|perm| res_value.match(perm)}
116
116
  necessary_permission_fields.each do |priv|
117
- missing_priv << priv unless res_value.match(priv)
117
+ found_priv << priv if res_value.match(priv)
118
118
  end
119
- return true if missing_priv.empty? or all_privileges_field.all? {|d| res_value.match(d)}
119
+ return true if (necessary_permission_fields-found_priv).empty? or all_privileges_field.all? {|d| res_value.match(d)}
120
120
  end
121
121
  end
122
- raise MysqlCompatibilityError, "The user '#{@db_opts[:username]}' does not have the correct permissions to run FlyData Sync\n * These privileges are missing: #{missing_priv.join(", ")}"
122
+ raise MysqlCompatibilityError, "The user '#{@db_opts[:username]}' does not have the correct permissions to run FlyData Sync\n * These privileges are missing: #{(necessary_permission_fields-found_priv).join(", ")}"
123
123
  end
124
124
 
125
125
  def check_mysql_protocol_tcp_compat
@@ -44,6 +44,66 @@ module Flydata
44
44
  "database" => "test_db"
45
45
  }
46
46
  end
47
+ describe "#check_mysql_user_compat" do
48
+ let(:client) { double('client') }
49
+ subject { MysqlCompatibilityCheck.new({},:default_mysql_cred) }
50
+ before do
51
+ allow(Mysql2::Client).to receive(:new).and_return(client)
52
+ allow(client).to receive(:close)
53
+ end
54
+
55
+ context "with all privileges for privileges all in one database" do
56
+ before do
57
+ allow(client).to receive(:query).and_return([{"Grants for test"=>"GRANT SELECT, LOCK TABLES, RELOAD, REPLICATION SLAVE, REPLICATION CLIENT ON `test_db`.* TO 'test'@'host"}])
58
+ end
59
+ it do
60
+ expect{subject.check_mysql_user_compat}
61
+ end
62
+ end
63
+ context "with missing privileges for privileges all in one database" do
64
+ before do
65
+ allow(client).to receive(:query).and_return([{"Grants for test"=>"GRANT SELECT, RELOAD, REPLICATION CLIENT ON `test_db`.* TO 'test'@'host"}])
66
+ end
67
+ it do
68
+ expect{subject.check_mysql_user_compat}.to raise_error(Flydata::MysqlCompatibilityCheck::MysqlCompatibilityError, /LOCK TABLES, REPLICATION SLAVE/)
69
+ end
70
+ end
71
+ context "with all privileges for privileges in between all and specific databases" do
72
+ before do
73
+ allow(client).to receive(:query).and_return([{"Grants for test"=>"GRANT RELOAD, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'test'@'host"},
74
+ {"Grants for test"=>"GRANT SELECT, LOCK TABLES ON `test_db`.* TO 'test'@'host"}])
75
+ end
76
+ it do
77
+ expect{subject.check_mysql_user_compat}
78
+ end
79
+ end
80
+ context "with missing privileges for privileges in between all and specific databases" do
81
+ before do
82
+ allow(client).to receive(:query).and_return([{"Grants for test"=>"GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'test'@'host"},
83
+ {"Grants for test"=>"GRANT SELECT, LOCK TABLES ON `test_db`.* TO 'test'@'host"}])
84
+ end
85
+ it do
86
+ expect{subject.check_mysql_user_compat}.to raise_error(Flydata::MysqlCompatibilityCheck::MysqlCompatibilityError, /RELOAD/)
87
+ end
88
+ end
89
+ context "with all privileges for privileges in all databases" do
90
+ before do
91
+ allow(client).to receive(:query).and_return([{"Grants for test"=>"GRANT SELECT, LOCK TABLES, RELOAD, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'test'@'host"}])
92
+ end
93
+ it do
94
+ expect{subject.check_mysql_user_compat}
95
+ end
96
+ end
97
+ context "with missing privileges for privileges in all databases" do
98
+ before do
99
+ allow(client).to receive(:query).and_return([{"Grants for test"=>"GRANT RELOAD, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'test'@'host"}])
100
+ end
101
+ it do
102
+ expect{subject.check_mysql_user_compat}.to raise_error(Flydata::MysqlCompatibilityCheck::MysqlCompatibilityError, /SELECT, LOCK TABLES/)
103
+ end
104
+ end
105
+
106
+ end
47
107
  describe "#check_mysql_binlog_retention" do
48
108
  context "on on-premise mysql server" do
49
109
  subject { MysqlCompatibilityCheck.new({},:default_mysql_cred) }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: flydata
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.14
4
+ version: 0.3.15
5
5
  platform: ruby
6
6
  authors:
7
7
  - Koichi Fujikawa