activerecord-cockroachdb-adapter 0.2.2 → 5.2.1
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 +5 -5
- data/.gitignore +1 -0
- data/.gitmodules +0 -0
- data/CONTRIBUTING.md +220 -0
- data/Gemfile +61 -2
- data/README.md +12 -2
- data/Rakefile +17 -5
- data/activerecord-cockroachdb-adapter.gemspec +3 -7
- data/build/Dockerfile +17 -0
- data/build/config.teamcity.yml +28 -0
- data/build/local-test.sh +38 -0
- data/build/teamcity-test.sh +62 -0
- data/docker.sh +38 -0
- data/lib/active_record/connection_adapters/cockroachdb/attribute_methods.rb +28 -0
- data/lib/active_record/connection_adapters/cockroachdb/column.rb +15 -0
- data/lib/active_record/connection_adapters/cockroachdb/database_statements.rb +102 -0
- data/lib/active_record/connection_adapters/cockroachdb/quoting.rb +28 -0
- data/lib/active_record/connection_adapters/cockroachdb/referential_integrity.rb +39 -0
- data/lib/active_record/connection_adapters/cockroachdb/schema_statements.rb +67 -0
- data/lib/active_record/connection_adapters/cockroachdb/transaction_manager.rb +29 -0
- data/lib/active_record/connection_adapters/cockroachdb/type.rb +14 -0
- data/lib/active_record/connection_adapters/cockroachdb_adapter.rb +243 -109
- metadata +23 -64
- data/.travis.yml +0 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: b2292eb1fe9b5352ccb2a135ee1681b342403f086d38d5c78f354d97008097fe
|
4
|
+
data.tar.gz: 7b144a460690d0a6eab7d827eb1e297c67f94be4191d8c949f33d74e90050a88
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6424288bb2dce9c2a530f3d2b0edd303c156fdd8dd85822756f9953ca7ebaff4cc32fed8cc233c580e570f561797d38ca741837edeccf5c4e95639b7e2dab816
|
7
|
+
data.tar.gz: 0d69e3fbf8e5809429608bbd292269affc21d88afcd7687a26443e6bbb55754bd623ba4d62da484a1ad4415f6633ba9f49eb57ba1e7d54ba632d3fc30e922eaa
|
data/.gitignore
CHANGED
data/.gitmodules
ADDED
File without changes
|
data/CONTRIBUTING.md
ADDED
@@ -0,0 +1,220 @@
|
|
1
|
+
# Getting started
|
2
|
+
|
3
|
+
|
4
|
+
## ActiveRecord adapters and you
|
5
|
+
|
6
|
+
There are two repositories for the ActiveRecord adapter. The one you're in
|
7
|
+
currently, [activerecord-cockroachdb-adapter], is the CockroachDB specific
|
8
|
+
ActiveRecord code. Users install this alongside ActiveRecord then use
|
9
|
+
CockroachDBAdapter to initialize ActiveRecord for their projects.
|
10
|
+
|
11
|
+
This adapter extends the PostgreSQL ActiveRecord adapter in order to
|
12
|
+
override and monkey-patch functionality.
|
13
|
+
|
14
|
+
[activerecord-cockroachdb-adapter]: https://github.com/cockroachdb/activerecord-cockroachdb-adapter/
|
15
|
+
|
16
|
+
## Setup and running tests
|
17
|
+
|
18
|
+
In CockroachDB, create two databases to be used by the ActiveRecord test suite:
|
19
|
+
activerecord_unittest and activerecord_unittest2.
|
20
|
+
|
21
|
+
```sql
|
22
|
+
CREATE DATABASE activerecord_unittest;
|
23
|
+
|
24
|
+
CREATE DATABASE activerecord_unittest2;
|
25
|
+
```
|
26
|
+
|
27
|
+
It is best to have a Ruby environment manager installed, such as
|
28
|
+
[rvm](https://rvm.io/), as Rails has varying Ruby version requirements.
|
29
|
+
If you are using rvm, you then install and use the required Ruby
|
30
|
+
version. The current tests use Rails 5.2.0 beta and Ruby >= 2.2.2.
|
31
|
+
|
32
|
+
(Alternatively, one can use `./docker.sh build/teamcity-test.sh` to run
|
33
|
+
tests similarily to TeamCity. The database is destroyed between each
|
34
|
+
test file.)
|
35
|
+
|
36
|
+
|
37
|
+
```bash
|
38
|
+
rvm install 2.2.5
|
39
|
+
# This only makes Ruby 2.2.5 active for the length of the terminal session.
|
40
|
+
rvm use 2.2.5
|
41
|
+
```
|
42
|
+
|
43
|
+
Using [bundler](http://bundler.io/), install the dependancies of Rails.
|
44
|
+
|
45
|
+
```bash
|
46
|
+
bundle install
|
47
|
+
```
|
48
|
+
|
49
|
+
Then, to run the full test suite with an active CockroachDB instance:
|
50
|
+
|
51
|
+
```bash
|
52
|
+
bundle exec rake test
|
53
|
+
```
|
54
|
+
|
55
|
+
To run specific ActiveRecord tests, set environemnt variable `TEST_FILES_AR`. For example, to run ActiveRecord tests `test/cases/associations_test.rb` and `test/cases/ar_schema_test.rb.rb`
|
56
|
+
|
57
|
+
```bash
|
58
|
+
TEST_FILES_AR="test/cases/associations_test.rb,test/cases/ar_schema_test.rb" bundle exec rake test
|
59
|
+
```
|
60
|
+
|
61
|
+
To run specific CockroachDB Adapter tests, set environemnt variable `TEST_FILES`. For example, to run CockroachDB Adpater tests `test/cases/adapter_test.rb` and `test/cases/associations/left_outer_join_association_test.rb`
|
62
|
+
|
63
|
+
```bash
|
64
|
+
TEST_FILES="test/cases/adapter_test.rb,test/cases/associations/left_outer_join_association_test.rb" bundle exec rake test
|
65
|
+
```
|
66
|
+
|
67
|
+
To run a specific test case, use minitest's `-n` option to run tests that match a given pattern. All minitest options are set via the `TESTOPTS` environemnt variable. For example, to run `test_indexes` from CockroachDB's `test/cases/adapter_test.rb` file
|
68
|
+
|
69
|
+
```bash
|
70
|
+
TEST_FILES="test/cases/adapter_test.rb" TESTOPTS=`-n=/test_indexes/` bundle exec rake test
|
71
|
+
```
|
72
|
+
|
73
|
+
By default, tests will be run from the bundled version of Rails. To run against a local copy, set environemnt variable `RAILS_SOURCE`. Running against a local copy of Rails can be helpful when try to debug issues.
|
74
|
+
|
75
|
+
```bash
|
76
|
+
RAILS_SOURCE="path/to/local_copy" bundle exec rake test
|
77
|
+
```
|
78
|
+
|
79
|
+
`test/config.yml` assumes CockroachDB will be running at localhost:26257 with a root user. Make changes to `test/config.yml` as needed.
|
80
|
+
|
81
|
+
# Improvements
|
82
|
+
|
83
|
+
|
84
|
+
## Support past Rails versions
|
85
|
+
|
86
|
+
Currently, only a beta version of Rails is tested. This means that the
|
87
|
+
adapter has been modified in to accomodate unreleased changes. In order
|
88
|
+
to run the tests for Rails 5.1 or 4.2, the test changes will need to be
|
89
|
+
cherry-picked back. Conflicts are mostly only expected for tests that
|
90
|
+
have not yet been added.
|
91
|
+
|
92
|
+
Sadly, this does mean that we will have to have multiple versions of the
|
93
|
+
driver for the multiple versions of Rails.
|
94
|
+
|
95
|
+
A proposal for the CockroachDB adapter versioning would be to follow
|
96
|
+
ActiveRecord minor versions. For example, if you use Rails 4.2.5, you
|
97
|
+
would specify the CockroachDB version `~> 4.2.0`.
|
98
|
+
|
99
|
+
|
100
|
+
## Running CI automatically
|
101
|
+
|
102
|
+
Currently the fork is set up to run using TeamCity only on the current
|
103
|
+
master branch, with an alpha build of CockroachDB. it would be even
|
104
|
+
better to be able to test multiple versions of the adapter, and do so
|
105
|
+
against different versions of CockroachDB.
|
106
|
+
|
107
|
+
|
108
|
+
## Adding feature support
|
109
|
+
|
110
|
+
As CockroachDB improves, so do the features that can be supported in
|
111
|
+
ActiveRecord. Many of them are gated by conditions the
|
112
|
+
CockroachDBAdapter has overrided. As these features are completed, these
|
113
|
+
gates should be toggled. Something that would help this process would be
|
114
|
+
linking those issues back to this adapter so that part of the feature
|
115
|
+
completing includes updating the adapter.
|
116
|
+
|
117
|
+
|
118
|
+
## Execute only tests that run with a connection
|
119
|
+
|
120
|
+
I have not investigated if this is already possible, but I would assume
|
121
|
+
no.
|
122
|
+
|
123
|
+
A possible way to approach this would be to add a shim to cause any
|
124
|
+
tests that use it to fail, and grep the tests that pass and then skip
|
125
|
+
them.
|
126
|
+
|
127
|
+
## Publishing to Rubygems
|
128
|
+
|
129
|
+
TODO: Expand on this. Jordan is likely the only person with publishing
|
130
|
+
credentials. I'm not sure if there is anything else other than:
|
131
|
+
|
132
|
+
```
|
133
|
+
gem build ...
|
134
|
+
gem publish <output file>
|
135
|
+
```
|
136
|
+
|
137
|
+
|
138
|
+
# Notes
|
139
|
+
|
140
|
+
When executing the test suite, each test file will reload fixtures. This
|
141
|
+
drops and creates about 200 tables (2 databases, 100 tables each).
|
142
|
+
Currently there are performance problems that rise from having lots of
|
143
|
+
table descriptors around, [cockroachdb/cockroach#20753]. At best, we can
|
144
|
+
run test files individually, clear out the CockroachDB data, and restart
|
145
|
+
the node to alleviate this.
|
146
|
+
|
147
|
+
Currently, annotations have been added to test files to indicate if it
|
148
|
+
is failing, and some brief details on why. Any annotated failures have
|
149
|
+
been skipped right now for further investigation. The pattern is the
|
150
|
+
following:
|
151
|
+
|
152
|
+
`# FILE(OK)` indicates that the file is currently passing, with no skips
|
153
|
+
required.
|
154
|
+
|
155
|
+
`# FILE(BAD)` indicates that there are failures that have been skipped.
|
156
|
+
These skips will look like `skip(reason) if current_adapter?(:CockroachDBAdapter)`.
|
157
|
+
|
158
|
+
`# FILE(BROKEN)` indicates that there are failures that have not been
|
159
|
+
skipped. This is often done if the entirety of a test file is
|
160
|
+
unsupported.
|
161
|
+
|
162
|
+
`# FILE(NOT DONE)` indicates files that have not yet been executed,
|
163
|
+
cleaned up, or skipped until passing.
|
164
|
+
|
165
|
+
The purpose of these was to make the tests grep-able while going through
|
166
|
+
all the failures.
|
167
|
+
|
168
|
+
|
169
|
+
[cockroachdb/cockroach#20753]: https://github.com/cockroachdb/cockroach/issues/20753#issuecomment-352810425
|
170
|
+
|
171
|
+
|
172
|
+
## Tracked test failures
|
173
|
+
|
174
|
+
Some of the skipped failures are:
|
175
|
+
|
176
|
+
- `default:` key is not working for columns in table schema
|
177
|
+
definitions. This causes tests to fail due to unexpected data.
|
178
|
+
|
179
|
+
- `array:` key is not working for columns in table schema definitions.
|
180
|
+
|
181
|
+
- `"Salary is not appearing in list"` is being raised in a number of
|
182
|
+
places. Likely during fixture setup.
|
183
|
+
|
184
|
+
- `sum` function seems to result in a different type in ActiveRecord.
|
185
|
+
Instead of returning a Ruby `int`, it returns a Ruby `string`. It
|
186
|
+
appears that MySQL2 also does this. A suspected cause might be how
|
187
|
+
`Decimal` is handled if `sum` consumes integers and return a
|
188
|
+
decimal.
|
189
|
+
|
190
|
+
- Potentially fork the PostgreSQL::SchemaDumper to handle anything
|
191
|
+
specific to CockroachDB, like primary keys or bigints.
|
192
|
+
|
193
|
+
- You can call `@connection.create_table(..., id: :bigint)`, but this
|
194
|
+
will not changes things for CockroachDB (I think...), so it would be
|
195
|
+
not allowed. Even better, our adapter could interpret this and
|
196
|
+
generate the appropriate explicit pkey column. Not sure what string
|
197
|
+
pkeys look like...
|
198
|
+
|
199
|
+
- `string` types are introspected to `text` types.
|
200
|
+
|
201
|
+
- A user can do an update, delete, and insert on views.
|
202
|
+
|
203
|
+
- Postgres specific bit strings are not properly supported.
|
204
|
+
|
205
|
+
Grepping for `FIXME(joey)`, `TODO(joey)`, and `NOTE(joey)` will yeild
|
206
|
+
most of the touchpoints including test failures and temporary monkey
|
207
|
+
patches. Some monkey patches were made directly to Rails, which will
|
208
|
+
need to be cleaned up.
|
209
|
+
|
210
|
+
|
211
|
+
# Notes for the non-Rubyer
|
212
|
+
|
213
|
+
rvm is an environment manager that lets you manage and swap between
|
214
|
+
multiple verisons of Ruby and their dependancies.
|
215
|
+
|
216
|
+
bundle is dependancy manager that uses a projects `Gemfile` (and often
|
217
|
+
`<project>.gemspec`) to manage and load dependancies and their required
|
218
|
+
versions. When using projects commands are prefixed with
|
219
|
+
`bundle exec ...`. Bundle will ensure that all depenedncies are fetched
|
220
|
+
and used.
|
data/Gemfile
CHANGED
@@ -1,4 +1,63 @@
|
|
1
|
+
require 'openssl'
|
1
2
|
source 'https://rubygems.org'
|
2
|
-
|
3
|
-
# Specify your gem's dependencies in activerecord-cockroachdb-adapter.gemspec
|
4
3
|
gemspec
|
4
|
+
|
5
|
+
if ENV['RAILS_SOURCE']
|
6
|
+
gemspec path: ENV['RAILS_SOURCE']
|
7
|
+
else
|
8
|
+
def get_version_from_gemspec
|
9
|
+
gemspec = eval(File.read('activerecord-cockroachdb-adapter.gemspec'))
|
10
|
+
|
11
|
+
gem_version = gemspec.dependencies.
|
12
|
+
find { |dep| dep.name == 'activerecord' }.
|
13
|
+
requirement.
|
14
|
+
requirements.
|
15
|
+
first.
|
16
|
+
last
|
17
|
+
|
18
|
+
major, minor, tiny, pre = gem_version.segments
|
19
|
+
|
20
|
+
if pre
|
21
|
+
gem_version.to_s
|
22
|
+
else
|
23
|
+
find_latest_matching_version(major, minor)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def find_latest_matching_version(gemspec_major, gemspec_minor)
|
28
|
+
all_activerecord_versions.
|
29
|
+
reject { |version| version["prerelease"] }.
|
30
|
+
map { |version| version["number"].split(".").map(&:to_i) }.
|
31
|
+
find { |major, minor|
|
32
|
+
major == gemspec_major && (minor == gemspec_minor || gemspec_minor.nil?)
|
33
|
+
}.join(".")
|
34
|
+
end
|
35
|
+
|
36
|
+
def all_activerecord_versions
|
37
|
+
require 'net/http'
|
38
|
+
require 'yaml'
|
39
|
+
|
40
|
+
uri = URI.parse "https://rubygems.org/api/v1/versions/activerecord.yaml"
|
41
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
42
|
+
http.use_ssl = true
|
43
|
+
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
44
|
+
|
45
|
+
YAML.load(
|
46
|
+
http.request(Net::HTTP::Get.new(uri.request_uri)).body
|
47
|
+
)
|
48
|
+
end
|
49
|
+
|
50
|
+
# Get Rails from source beacause the gem doesn't include tests
|
51
|
+
version = ENV['RAILS_VERSION'] || get_version_from_gemspec
|
52
|
+
gem 'rails', git: "https://github.com/rails/rails.git", tag: "v#{version}"
|
53
|
+
end
|
54
|
+
|
55
|
+
group :development do
|
56
|
+
gem "byebug"
|
57
|
+
gem "minitest-excludes"
|
58
|
+
|
59
|
+
# Gems used by the ActiveRecord test suite
|
60
|
+
gem "bcrypt"
|
61
|
+
gem "mocha"
|
62
|
+
gem "sqlite3"
|
63
|
+
end
|
data/README.md
CHANGED
@@ -1,19 +1,29 @@
|
|
1
1
|
# ActiveRecord CockroachDB Adapter
|
2
2
|
|
3
|
-
CockroachDB adapter for ActiveRecord 5. This is a lightweight extension of the PostgreSQL adapter that establishes compatibility with [CockroachDB](https://github.com/cockroachdb/cockroach).
|
3
|
+
CockroachDB adapter for ActiveRecord 4 and 5. This is a lightweight extension of the PostgreSQL adapter that establishes compatibility with [CockroachDB](https://github.com/cockroachdb/cockroach).
|
4
4
|
|
5
5
|
## Installation
|
6
6
|
|
7
7
|
Add this line to your project's Gemfile:
|
8
8
|
|
9
9
|
```ruby
|
10
|
-
gem 'activerecord-cockroachdb-adapter', '~>
|
10
|
+
gem 'activerecord-cockroachdb-adapter', '~> 5.2.0'
|
11
11
|
```
|
12
12
|
|
13
|
+
If you're using Rails 4.x, use the `0.1.x` versions of this gem.
|
14
|
+
|
13
15
|
In `database.yml`, use the following adapter setting:
|
14
16
|
|
15
17
|
```
|
16
18
|
development:
|
17
19
|
adapter: cockroachdb
|
18
20
|
port: 26257
|
21
|
+
host: <hostname>
|
22
|
+
user: <username>
|
19
23
|
```
|
24
|
+
|
25
|
+
|
26
|
+
## Modifying the adapter?
|
27
|
+
|
28
|
+
See [CONTRIBUTING.md](/CONTRIBUTING.md) for more details on setting up
|
29
|
+
the environment and making modifications.
|
data/Rakefile
CHANGED
@@ -1,10 +1,22 @@
|
|
1
1
|
require "bundler/gem_tasks"
|
2
2
|
require "rake/testtask"
|
3
|
+
require_relative 'test/support/paths_cockroachdb'
|
4
|
+
require_relative 'test/support/rake_helpers'
|
3
5
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
6
|
+
task test: ["test:cockroachdb"]
|
7
|
+
task default: [:test]
|
8
|
+
|
9
|
+
namespace :test do
|
10
|
+
Rake::TestTask.new("cockroachdb") do |t|
|
11
|
+
t.libs = ARTest::CockroachDB.test_load_paths
|
12
|
+
t.test_files = test_files
|
13
|
+
t.warning = !!ENV["WARNING"]
|
14
|
+
t.verbose = false
|
15
|
+
end
|
16
|
+
|
17
|
+
task "cockroachdb:env" do
|
18
|
+
ENV["ARCONN"] = "cockroachdb"
|
19
|
+
end
|
8
20
|
end
|
9
21
|
|
10
|
-
task :
|
22
|
+
task 'test:cockroachdb' => 'test:cockroachdb:env'
|
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
4
|
|
5
5
|
Gem::Specification.new do |spec|
|
6
6
|
spec.name = "activerecord-cockroachdb-adapter"
|
7
|
-
spec.version = "
|
7
|
+
spec.version = "5.2.1"
|
8
8
|
spec.licenses = ["Apache-2.0"]
|
9
9
|
spec.authors = ["Cockroach Labs"]
|
10
10
|
spec.email = ["cockroach-db@googlegroups.com"]
|
@@ -13,8 +13,8 @@ Gem::Specification.new do |spec|
|
|
13
13
|
spec.description = "Allows the use of CockroachDB as a backend for ActiveRecord and Rails apps."
|
14
14
|
spec.homepage = "https://github.com/cockroachdb/activerecord-cockroachdb-adapter"
|
15
15
|
|
16
|
-
spec.add_dependency "activerecord", "~> 5.
|
17
|
-
spec.add_dependency "pg", ">= 0.20"
|
16
|
+
spec.add_dependency "activerecord", "~> 5.2"
|
17
|
+
spec.add_dependency "pg", ">= 0.20"
|
18
18
|
|
19
19
|
# Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
|
20
20
|
# to allow pushing to a single host or delete this section to allow pushing to any host.
|
@@ -31,8 +31,4 @@ Gem::Specification.new do |spec|
|
|
31
31
|
spec.bindir = "exe"
|
32
32
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
33
33
|
spec.require_paths = ["lib"]
|
34
|
-
|
35
|
-
spec.add_development_dependency "bundler", "~> 1.14"
|
36
|
-
spec.add_development_dependency "rake", "~> 10.0"
|
37
|
-
spec.add_development_dependency "minitest", "~> 5.0"
|
38
34
|
end
|
data/build/Dockerfile
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
# This Dockerfile extends the Examples-ORM testing image in order to
|
2
|
+
# install specific dependencies required for ActiveRecord tests.
|
3
|
+
|
4
|
+
FROM cockroachdb/example-orms-builder:20200413-1918
|
5
|
+
|
6
|
+
# Native dependencies for libxml-ruby and sqlite3.
|
7
|
+
RUN apt-get update -y && apt-get install -y \
|
8
|
+
libxslt-dev \
|
9
|
+
libxml2-dev \
|
10
|
+
libsqlite3-dev \
|
11
|
+
&& rm -rf /var/lib/apt/lists/*
|
12
|
+
|
13
|
+
# Ruby testing dependencies.
|
14
|
+
RUN gem install bundle rake
|
15
|
+
|
16
|
+
# Add global Gem binaries to the path.
|
17
|
+
ENV PATH /usr/local/lib/ruby/gems/2.4.0::$PATH
|
@@ -0,0 +1,28 @@
|
|
1
|
+
default_connection: cockroachdb
|
2
|
+
|
3
|
+
with_manual_interventions: false
|
4
|
+
|
5
|
+
connections:
|
6
|
+
cockroachdb:
|
7
|
+
arunit:
|
8
|
+
database: activerecord_unittest
|
9
|
+
host: localhost
|
10
|
+
port: 26257
|
11
|
+
user: root
|
12
|
+
requiressl: disable
|
13
|
+
min_messages: warning
|
14
|
+
arunit_without_prepared_statements:
|
15
|
+
database: activerecord_unittest
|
16
|
+
host: localhost
|
17
|
+
port: 26257
|
18
|
+
user: root
|
19
|
+
requiressl: disable
|
20
|
+
min_messages: warning
|
21
|
+
prepared_statements: false
|
22
|
+
arunit2:
|
23
|
+
database: activerecord_unittest2
|
24
|
+
host: localhost
|
25
|
+
port: 26257
|
26
|
+
user: root
|
27
|
+
requiressl: disable
|
28
|
+
min_messages: warning
|
data/build/local-test.sh
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
#!/usr/bin/env bash
|
2
|
+
|
3
|
+
set -euo pipefail
|
4
|
+
|
5
|
+
readonly urlfile=cockroach-url
|
6
|
+
|
7
|
+
# Start a CockroachDB server, wait for it to become ready, and arrange for it to
|
8
|
+
# be force-killed when the script exits.
|
9
|
+
rm -f "$urlfile"
|
10
|
+
# Clean out a past CockroachDB instance. This happens if a build was
|
11
|
+
# canceled on an agent.
|
12
|
+
rm -rf $HOME/tmp/rails &
|
13
|
+
# Start CockroachDB.
|
14
|
+
cockroach quit --insecure || true
|
15
|
+
cockroach start --insecure --host=localhost --listening-url-file="$urlfile" --store=path=$HOME/tmp/rails &
|
16
|
+
trap "echo 'Exit routine: Killing CockroachDB.' && kill -9 $! &> /dev/null" EXIT
|
17
|
+
for i in {0..3}
|
18
|
+
do
|
19
|
+
[[ -f "$urlfile" ]] && break
|
20
|
+
backoff=$((2 ** i))
|
21
|
+
echo "server not yet available; sleeping for $backoff seconds"
|
22
|
+
sleep $backoff
|
23
|
+
done
|
24
|
+
|
25
|
+
# Target the Rails dependency file.
|
26
|
+
export BUNDLE_GEMFILE=$(pwd)/rails/Gemfile
|
27
|
+
|
28
|
+
# Run the tests.
|
29
|
+
cp build/config.teamcity.yml rails/activerecord/test/config.yml
|
30
|
+
echo "Rebuilding database"
|
31
|
+
(cd rails/activerecord && bundle exec rake db:cockroachdb:rebuild)
|
32
|
+
echo "Starting tests"
|
33
|
+
(cd rails/activerecord && bundle exec rake test:cockroachdb TESTFILES=$1)
|
34
|
+
|
35
|
+
# Attempt a clean shutdown for good measure. We'll force-kill in the atexit
|
36
|
+
# handler if this fails.
|
37
|
+
cockroach quit --insecure
|
38
|
+
trap - EXIT
|