mongoid 7.5.4 → 8.1.7

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.
Files changed (442) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +3 -3
  3. data/README.md +6 -6
  4. data/Rakefile +44 -46
  5. data/lib/config/locales/en.yml +92 -43
  6. data/lib/mongoid/association/accessors.rb +44 -11
  7. data/lib/mongoid/association/bindable.rb +50 -2
  8. data/lib/mongoid/association/builders.rb +5 -3
  9. data/lib/mongoid/association/constrainable.rb +0 -1
  10. data/lib/mongoid/association/eager_loadable.rb +29 -7
  11. data/lib/mongoid/association/embedded/batchable.rb +34 -11
  12. data/lib/mongoid/association/embedded/cyclic.rb +1 -1
  13. data/lib/mongoid/association/embedded/embedded_in/binding.rb +24 -2
  14. data/lib/mongoid/association/embedded/embedded_in/buildable.rb +2 -2
  15. data/lib/mongoid/association/embedded/embedded_in/proxy.rb +4 -3
  16. data/lib/mongoid/association/embedded/embedded_in.rb +3 -2
  17. data/lib/mongoid/association/embedded/embeds_many/binding.rb +1 -0
  18. data/lib/mongoid/association/embedded/embeds_many/buildable.rb +4 -3
  19. data/lib/mongoid/association/embedded/embeds_many/proxy.rb +85 -46
  20. data/lib/mongoid/association/embedded/embeds_many.rb +2 -2
  21. data/lib/mongoid/association/embedded/embeds_one/buildable.rb +19 -5
  22. data/lib/mongoid/association/embedded/embeds_one/proxy.rb +24 -5
  23. data/lib/mongoid/association/embedded/embeds_one.rb +3 -3
  24. data/lib/mongoid/association/macros.rb +8 -1
  25. data/lib/mongoid/association/many.rb +11 -7
  26. data/lib/mongoid/association/nested/many.rb +5 -4
  27. data/lib/mongoid/association/nested/nested_buildable.rb +4 -4
  28. data/lib/mongoid/association/nested/one.rb +45 -7
  29. data/lib/mongoid/association/one.rb +2 -2
  30. data/lib/mongoid/association/options.rb +9 -9
  31. data/lib/mongoid/association/proxy.rb +15 -4
  32. data/lib/mongoid/association/referenced/auto_save.rb +4 -3
  33. data/lib/mongoid/association/referenced/belongs_to/binding.rb +1 -0
  34. data/lib/mongoid/association/referenced/belongs_to/buildable.rb +1 -1
  35. data/lib/mongoid/association/referenced/belongs_to/proxy.rb +5 -6
  36. data/lib/mongoid/association/referenced/belongs_to.rb +2 -2
  37. data/lib/mongoid/association/referenced/counter_cache.rb +10 -10
  38. data/lib/mongoid/association/referenced/eager.rb +2 -2
  39. data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +70 -13
  40. data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +6 -3
  41. data/lib/mongoid/association/referenced/has_many/enumerable.rb +22 -30
  42. data/lib/mongoid/association/referenced/has_many/proxy.rb +40 -21
  43. data/lib/mongoid/association/referenced/has_many.rb +3 -3
  44. data/lib/mongoid/association/referenced/has_one/buildable.rb +1 -1
  45. data/lib/mongoid/association/referenced/has_one/nested_builder.rb +5 -5
  46. data/lib/mongoid/association/referenced/has_one/proxy.rb +9 -12
  47. data/lib/mongoid/association/referenced/has_one.rb +3 -3
  48. data/lib/mongoid/association/referenced/syncable.rb +4 -4
  49. data/lib/mongoid/association/reflections.rb +4 -4
  50. data/lib/mongoid/association/relatable.rb +44 -10
  51. data/lib/mongoid/association.rb +5 -5
  52. data/lib/mongoid/atomic/modifiers.rb +2 -2
  53. data/lib/mongoid/atomic.rb +16 -7
  54. data/lib/mongoid/attributes/dynamic.rb +4 -4
  55. data/lib/mongoid/attributes/nested.rb +6 -6
  56. data/lib/mongoid/attributes/processing.rb +37 -6
  57. data/lib/mongoid/attributes/projector.rb +2 -2
  58. data/lib/mongoid/attributes/readonly.rb +3 -3
  59. data/lib/mongoid/attributes.rb +51 -42
  60. data/lib/mongoid/changeable.rb +147 -14
  61. data/lib/mongoid/clients/options.rb +5 -1
  62. data/lib/mongoid/clients/sessions.rb +2 -14
  63. data/lib/mongoid/clients/storage_options.rb +2 -5
  64. data/lib/mongoid/clients/validators/storage.rb +3 -15
  65. data/lib/mongoid/collection_configurable.rb +58 -0
  66. data/lib/mongoid/composable.rb +2 -0
  67. data/lib/mongoid/config/defaults.rb +60 -0
  68. data/lib/mongoid/config/options.rb +3 -0
  69. data/lib/mongoid/config/validators/async_query_executor.rb +24 -0
  70. data/lib/mongoid/config/validators/client.rb +6 -6
  71. data/lib/mongoid/config/validators.rb +1 -0
  72. data/lib/mongoid/config.rb +153 -18
  73. data/lib/mongoid/contextual/aggregable/memory.rb +24 -16
  74. data/lib/mongoid/contextual/aggregable/mongo.rb +5 -5
  75. data/lib/mongoid/contextual/aggregable/none.rb +1 -1
  76. data/lib/mongoid/contextual/atomic.rb +1 -1
  77. data/lib/mongoid/contextual/geo_near.rb +7 -7
  78. data/lib/mongoid/contextual/map_reduce.rb +2 -2
  79. data/lib/mongoid/contextual/memory.rb +285 -58
  80. data/lib/mongoid/contextual/mongo/documents_loader.rb +177 -0
  81. data/lib/mongoid/contextual/mongo.rb +540 -346
  82. data/lib/mongoid/contextual/none.rb +193 -20
  83. data/lib/mongoid/contextual/queryable.rb +1 -1
  84. data/lib/mongoid/contextual.rb +14 -2
  85. data/lib/mongoid/copyable.rb +32 -8
  86. data/lib/mongoid/criteria/findable.rb +8 -5
  87. data/lib/mongoid/criteria/includable.rb +27 -22
  88. data/lib/mongoid/criteria/marshalable.rb +10 -2
  89. data/lib/mongoid/criteria/permission.rb +1 -1
  90. data/lib/mongoid/criteria/queryable/aggregable.rb +2 -2
  91. data/lib/mongoid/criteria/queryable/extensions/array.rb +3 -16
  92. data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +25 -4
  93. data/lib/mongoid/criteria/queryable/extensions/boolean.rb +2 -2
  94. data/lib/mongoid/criteria/queryable/extensions/date.rb +6 -1
  95. data/lib/mongoid/criteria/queryable/extensions/date_time.rb +6 -1
  96. data/lib/mongoid/criteria/queryable/extensions/hash.rb +1 -17
  97. data/lib/mongoid/criteria/queryable/extensions/numeric.rb +15 -9
  98. data/lib/mongoid/criteria/queryable/extensions/object.rb +2 -1
  99. data/lib/mongoid/criteria/queryable/extensions/range.rb +13 -5
  100. data/lib/mongoid/criteria/queryable/extensions/regexp.rb +3 -3
  101. data/lib/mongoid/criteria/queryable/extensions/set.rb +1 -1
  102. data/lib/mongoid/criteria/queryable/extensions/string.rb +4 -14
  103. data/lib/mongoid/criteria/queryable/extensions/symbol.rb +4 -12
  104. data/lib/mongoid/criteria/queryable/extensions/time.rb +6 -1
  105. data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +6 -1
  106. data/lib/mongoid/criteria/queryable/key.rb +4 -4
  107. data/lib/mongoid/criteria/queryable/mergeable.rb +1 -1
  108. data/lib/mongoid/criteria/queryable/optional.rb +11 -17
  109. data/lib/mongoid/criteria/queryable/options.rb +2 -2
  110. data/lib/mongoid/criteria/queryable/pipeline.rb +1 -1
  111. data/lib/mongoid/criteria/queryable/selectable.rb +47 -38
  112. data/lib/mongoid/criteria/queryable/selector.rb +92 -7
  113. data/lib/mongoid/criteria/queryable/smash.rb +40 -7
  114. data/lib/mongoid/criteria/queryable.rb +12 -7
  115. data/lib/mongoid/criteria/scopable.rb +2 -2
  116. data/lib/mongoid/criteria/translator.rb +45 -0
  117. data/lib/mongoid/criteria.rb +20 -40
  118. data/lib/mongoid/deprecable.rb +37 -0
  119. data/lib/mongoid/deprecation.rb +25 -0
  120. data/lib/mongoid/document.rb +127 -35
  121. data/lib/mongoid/equality.rb +8 -8
  122. data/lib/mongoid/errors/create_collection_failure.rb +33 -0
  123. data/lib/mongoid/errors/document_not_found.rb +10 -6
  124. data/lib/mongoid/errors/drop_collection_failure.rb +27 -0
  125. data/lib/mongoid/errors/immutable_attribute.rb +26 -0
  126. data/lib/mongoid/errors/invalid_async_query_executor.rb +25 -0
  127. data/lib/mongoid/errors/invalid_config_option.rb +1 -1
  128. data/lib/mongoid/errors/invalid_dependent_strategy.rb +1 -1
  129. data/lib/mongoid/errors/invalid_dot_dollar_assignment.rb +23 -0
  130. data/lib/mongoid/errors/invalid_field.rb +6 -2
  131. data/lib/mongoid/errors/invalid_field_type.rb +26 -0
  132. data/lib/mongoid/errors/invalid_global_executor_concurrency.rb +22 -0
  133. data/lib/mongoid/errors/invalid_relation.rb +1 -1
  134. data/lib/mongoid/errors/invalid_relation_option.rb +1 -1
  135. data/lib/mongoid/errors/invalid_session_use.rb +1 -1
  136. data/lib/mongoid/errors/invalid_storage_options.rb +1 -1
  137. data/lib/mongoid/errors/invalid_storage_parent.rb +2 -0
  138. data/lib/mongoid/errors/mongoid_error.rb +3 -3
  139. data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +1 -1
  140. data/lib/mongoid/errors/no_client_database.rb +1 -1
  141. data/lib/mongoid/errors/no_client_hosts.rb +1 -1
  142. data/lib/mongoid/errors/readonly_attribute.rb +1 -1
  143. data/lib/mongoid/errors/too_many_nested_attribute_records.rb +1 -1
  144. data/lib/mongoid/errors/unknown_attribute.rb +1 -1
  145. data/lib/mongoid/errors.rb +6 -3
  146. data/lib/mongoid/extensions/array.rb +9 -7
  147. data/lib/mongoid/extensions/big_decimal.rb +33 -10
  148. data/lib/mongoid/extensions/binary.rb +42 -0
  149. data/lib/mongoid/extensions/boolean.rb +8 -2
  150. data/lib/mongoid/extensions/date.rb +26 -20
  151. data/lib/mongoid/extensions/date_time.rb +1 -1
  152. data/lib/mongoid/extensions/false_class.rb +1 -1
  153. data/lib/mongoid/extensions/float.rb +7 -4
  154. data/lib/mongoid/extensions/hash.rb +38 -9
  155. data/lib/mongoid/extensions/integer.rb +7 -4
  156. data/lib/mongoid/extensions/module.rb +1 -1
  157. data/lib/mongoid/extensions/object.rb +10 -8
  158. data/lib/mongoid/extensions/range.rb +41 -10
  159. data/lib/mongoid/extensions/regexp.rb +11 -4
  160. data/lib/mongoid/extensions/set.rb +11 -4
  161. data/lib/mongoid/extensions/string.rb +11 -22
  162. data/lib/mongoid/extensions/symbol.rb +4 -15
  163. data/lib/mongoid/extensions/time.rb +29 -16
  164. data/lib/mongoid/extensions/time_with_zone.rb +1 -2
  165. data/lib/mongoid/extensions/true_class.rb +1 -1
  166. data/lib/mongoid/extensions.rb +1 -0
  167. data/lib/mongoid/factory.rb +55 -7
  168. data/lib/mongoid/fields/foreign_key.rb +11 -4
  169. data/lib/mongoid/fields/localized.rb +19 -4
  170. data/lib/mongoid/fields/standard.rb +17 -7
  171. data/lib/mongoid/fields/validators/macro.rb +3 -9
  172. data/lib/mongoid/fields.rb +142 -28
  173. data/lib/mongoid/findable.rb +54 -24
  174. data/lib/mongoid/indexable/specification.rb +2 -2
  175. data/lib/mongoid/indexable/validators/options.rb +6 -2
  176. data/lib/mongoid/interceptable.rb +186 -16
  177. data/lib/mongoid/matchable.rb +1 -1
  178. data/lib/mongoid/matcher/eq_impl.rb +1 -1
  179. data/lib/mongoid/matcher/type.rb +1 -1
  180. data/lib/mongoid/matcher.rb +48 -14
  181. data/lib/mongoid/persistable/creatable.rb +19 -9
  182. data/lib/mongoid/persistable/deletable.rb +2 -2
  183. data/lib/mongoid/persistable/destroyable.rb +1 -1
  184. data/lib/mongoid/persistable/savable.rb +14 -2
  185. data/lib/mongoid/persistable/unsettable.rb +2 -2
  186. data/lib/mongoid/persistable/updatable.rb +69 -12
  187. data/lib/mongoid/persistable/upsertable.rb +21 -2
  188. data/lib/mongoid/persistable.rb +6 -3
  189. data/lib/mongoid/persistence_context.rb +6 -4
  190. data/lib/mongoid/query_cache.rb +13 -261
  191. data/lib/mongoid/railties/controller_runtime.rb +1 -1
  192. data/lib/mongoid/railties/database.rake +7 -2
  193. data/lib/mongoid/reloadable.rb +10 -8
  194. data/lib/mongoid/scopable.rb +15 -13
  195. data/lib/mongoid/selectable.rb +1 -2
  196. data/lib/mongoid/serializable.rb +17 -13
  197. data/lib/mongoid/stateful.rb +57 -10
  198. data/lib/mongoid/tasks/database.rake +12 -0
  199. data/lib/mongoid/tasks/database.rb +20 -2
  200. data/lib/mongoid/threaded/lifecycle.rb +5 -5
  201. data/lib/mongoid/threaded.rb +42 -12
  202. data/lib/mongoid/timestamps/created.rb +1 -1
  203. data/lib/mongoid/timestamps/updated.rb +2 -2
  204. data/lib/mongoid/touchable.rb +3 -4
  205. data/lib/mongoid/traversable.rb +10 -5
  206. data/lib/mongoid/utils.rb +22 -0
  207. data/lib/mongoid/validatable/associated.rb +98 -17
  208. data/lib/mongoid/validatable/localizable.rb +1 -1
  209. data/lib/mongoid/validatable/macros.rb +5 -7
  210. data/lib/mongoid/validatable/presence.rb +2 -2
  211. data/lib/mongoid/validatable/uniqueness.rb +9 -8
  212. data/lib/mongoid/validatable.rb +17 -6
  213. data/lib/mongoid/version.rb +1 -1
  214. data/lib/mongoid/warnings.rb +19 -4
  215. data/lib/mongoid.rb +17 -3
  216. data/spec/config/mongoid.yml +16 -0
  217. data/spec/integration/app_spec.rb +24 -19
  218. data/spec/integration/associations/belongs_to_spec.rb +18 -0
  219. data/spec/integration/associations/embedded_spec.rb +15 -0
  220. data/spec/integration/associations/embeds_many_spec.rb +15 -2
  221. data/spec/integration/associations/embeds_one_spec.rb +18 -0
  222. data/spec/integration/associations/foreign_key_spec.rb +9 -0
  223. data/spec/integration/associations/has_and_belongs_to_many_spec.rb +61 -0
  224. data/spec/integration/associations/has_one_spec.rb +97 -1
  225. data/spec/integration/associations/scope_option_spec.rb +1 -1
  226. data/spec/integration/callbacks_models.rb +132 -1
  227. data/spec/integration/callbacks_spec.rb +381 -4
  228. data/spec/integration/criteria/range_spec.rb +95 -1
  229. data/spec/integration/discriminator_key_spec.rb +118 -80
  230. data/spec/integration/dots_and_dollars_spec.rb +277 -0
  231. data/spec/integration/i18n_fallbacks_spec.rb +3 -32
  232. data/spec/integration/matcher_examples_spec.rb +20 -13
  233. data/spec/integration/matcher_operator_data/type_decimal.yml +3 -2
  234. data/spec/integration/matcher_operator_spec.rb +3 -5
  235. data/spec/integration/persistence/range_field_spec.rb +350 -0
  236. data/spec/mongoid/association/counter_cache_spec.rb +1 -1
  237. data/spec/mongoid/association/depending_spec.rb +9 -9
  238. data/spec/mongoid/association/eager_spec.rb +2 -1
  239. data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +2 -1
  240. data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +54 -0
  241. data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +96 -9
  242. data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +112 -0
  243. data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +290 -65
  244. data/spec/mongoid/association/embedded/embeds_many_models.rb +37 -0
  245. data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +16 -0
  246. data/spec/mongoid/association/embedded/embeds_many_spec.rb +68 -0
  247. data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +25 -0
  248. data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +15 -2
  249. data/spec/mongoid/association/embedded/embeds_one_models.rb +19 -0
  250. data/spec/mongoid/association/embedded/embeds_one_spec.rb +28 -0
  251. data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +2 -1
  252. data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +54 -0
  253. data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +19 -0
  254. data/spec/mongoid/association/referenced/belongs_to_models.rb +11 -0
  255. data/spec/mongoid/association/referenced/belongs_to_spec.rb +4 -20
  256. data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +186 -229
  257. data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +25 -0
  258. data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +35 -2
  259. data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +109 -0
  260. data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +2 -56
  261. data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +215 -177
  262. data/spec/mongoid/association/referenced/has_many_models.rb +3 -1
  263. data/spec/mongoid/association/referenced/has_many_spec.rb +25 -0
  264. data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +2 -2
  265. data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +107 -1
  266. data/spec/mongoid/association/referenced/has_one_models.rb +16 -0
  267. data/spec/mongoid/association/syncable_spec.rb +15 -1
  268. data/spec/mongoid/atomic/paths_spec.rb +0 -14
  269. data/spec/mongoid/attributes/nested_spec.rb +80 -11
  270. data/spec/mongoid/attributes/nested_spec_models.rb +48 -0
  271. data/spec/mongoid/attributes/projector_spec.rb +1 -5
  272. data/spec/mongoid/attributes_spec.rb +526 -33
  273. data/spec/mongoid/changeable_spec.rb +429 -37
  274. data/spec/mongoid/clients/factory_spec.rb +23 -30
  275. data/spec/mongoid/clients/sessions_spec.rb +0 -38
  276. data/spec/mongoid/clients_spec.rb +149 -15
  277. data/spec/mongoid/collection_configurable_spec.rb +158 -0
  278. data/spec/mongoid/config/defaults_spec.rb +160 -0
  279. data/spec/mongoid/config_spec.rb +214 -31
  280. data/spec/mongoid/contextual/aggregable/memory_spec.rb +396 -158
  281. data/spec/mongoid/contextual/aggregable/memory_table.yml +88 -0
  282. data/spec/mongoid/contextual/aggregable/memory_table_spec.rb +62 -0
  283. data/spec/mongoid/contextual/map_reduce_spec.rb +2 -16
  284. data/spec/mongoid/contextual/memory_spec.rb +850 -88
  285. data/spec/mongoid/contextual/mongo/documents_loader_spec.rb +187 -0
  286. data/spec/mongoid/contextual/mongo_spec.rb +2256 -1005
  287. data/spec/mongoid/contextual/none_spec.rb +60 -21
  288. data/spec/mongoid/copyable_spec.rb +453 -11
  289. data/spec/mongoid/criteria/findable_spec.rb +86 -210
  290. data/spec/mongoid/criteria/includable_spec.rb +1492 -0
  291. data/spec/mongoid/criteria/includable_spec_models.rb +54 -0
  292. data/spec/mongoid/criteria/marshalable_spec.rb +18 -1
  293. data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +7 -19
  294. data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +134 -26
  295. data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +11 -0
  296. data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +11 -0
  297. data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +0 -15
  298. data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +73 -7
  299. data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +4 -69
  300. data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +0 -59
  301. data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +11 -0
  302. data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +11 -0
  303. data/spec/mongoid/criteria/queryable/optional_spec.rb +15 -484
  304. data/spec/mongoid/criteria/queryable/options_spec.rb +1 -1
  305. data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +469 -0
  306. data/spec/mongoid/criteria/queryable/selectable_spec.rb +78 -86
  307. data/spec/mongoid/criteria/queryable/selector_spec.rb +15 -3
  308. data/spec/mongoid/criteria/translator_spec.rb +132 -0
  309. data/spec/mongoid/criteria_projection_spec.rb +1 -5
  310. data/spec/mongoid/criteria_spec.rb +469 -1205
  311. data/spec/mongoid/document_fields_spec.rb +173 -24
  312. data/spec/mongoid/document_spec.rb +32 -41
  313. data/spec/mongoid/errors/document_not_found_spec.rb +29 -2
  314. data/spec/mongoid/errors/invalid_field_spec.rb +1 -1
  315. data/spec/mongoid/errors/invalid_field_type_spec.rb +55 -0
  316. data/spec/mongoid/errors/mongoid_error_spec.rb +3 -1
  317. data/spec/mongoid/errors/no_environment_spec.rb +3 -3
  318. data/spec/mongoid/errors/readonly_document_spec.rb +2 -2
  319. data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +1 -1
  320. data/spec/mongoid/extensions/array_spec.rb +16 -2
  321. data/spec/mongoid/extensions/big_decimal_spec.rb +712 -212
  322. data/spec/mongoid/extensions/binary_spec.rb +44 -9
  323. data/spec/mongoid/extensions/boolean_spec.rb +68 -82
  324. data/spec/mongoid/extensions/date_class_mongoize_spec.rb +7 -3
  325. data/spec/mongoid/extensions/date_spec.rb +71 -1
  326. data/spec/mongoid/extensions/date_time_spec.rb +15 -9
  327. data/spec/mongoid/extensions/float_spec.rb +53 -74
  328. data/spec/mongoid/extensions/hash_spec.rb +33 -3
  329. data/spec/mongoid/extensions/integer_spec.rb +50 -64
  330. data/spec/mongoid/extensions/range_spec.rb +255 -54
  331. data/spec/mongoid/extensions/regexp_spec.rb +58 -33
  332. data/spec/mongoid/extensions/set_spec.rb +106 -0
  333. data/spec/mongoid/extensions/string_spec.rb +53 -25
  334. data/spec/mongoid/extensions/symbol_spec.rb +18 -25
  335. data/spec/mongoid/extensions/time_spec.rb +639 -106
  336. data/spec/mongoid/extensions/time_with_zone_spec.rb +24 -83
  337. data/spec/mongoid/factory_spec.rb +61 -1
  338. data/spec/mongoid/fields/localized_spec.rb +80 -37
  339. data/spec/mongoid/fields_spec.rb +503 -87
  340. data/spec/mongoid/findable_spec.rb +450 -58
  341. data/spec/mongoid/indexable/specification_spec.rb +2 -2
  342. data/spec/mongoid/indexable_spec.rb +55 -30
  343. data/spec/mongoid/interceptable_spec.rb +824 -22
  344. data/spec/mongoid/interceptable_spec_models.rb +235 -4
  345. data/spec/mongoid/matcher/extract_attribute_spec.rb +1 -5
  346. data/spec/mongoid/mongoizable_spec.rb +285 -0
  347. data/spec/mongoid/persistable/creatable_spec.rb +2 -2
  348. data/spec/mongoid/persistable/deletable_spec.rb +28 -8
  349. data/spec/mongoid/persistable/destroyable_spec.rb +28 -8
  350. data/spec/mongoid/persistable/incrementable_spec.rb +37 -0
  351. data/spec/mongoid/persistable/logical_spec.rb +37 -0
  352. data/spec/mongoid/persistable/poppable_spec.rb +36 -0
  353. data/spec/mongoid/persistable/pullable_spec.rb +72 -0
  354. data/spec/mongoid/persistable/pushable_spec.rb +72 -0
  355. data/spec/mongoid/persistable/renamable_spec.rb +36 -0
  356. data/spec/mongoid/persistable/savable_spec.rb +96 -0
  357. data/spec/mongoid/persistable/settable_spec.rb +37 -0
  358. data/spec/mongoid/persistable/unsettable_spec.rb +36 -0
  359. data/spec/mongoid/persistable/updatable_spec.rb +20 -28
  360. data/spec/mongoid/persistable/upsertable_spec.rb +89 -1
  361. data/spec/mongoid/persistence_context_spec.rb +31 -57
  362. data/spec/mongoid/query_cache_middleware_spec.rb +0 -18
  363. data/spec/mongoid/query_cache_spec.rb +56 -215
  364. data/spec/mongoid/reloadable_spec.rb +83 -6
  365. data/spec/mongoid/scopable_spec.rb +91 -1
  366. data/spec/mongoid/serializable_spec.rb +25 -39
  367. data/spec/mongoid/shardable_spec.rb +4 -4
  368. data/spec/mongoid/stateful_spec.rb +150 -8
  369. data/spec/mongoid/tasks/database_rake_spec.rb +74 -0
  370. data/spec/mongoid/tasks/database_spec.rb +127 -0
  371. data/spec/mongoid/timestamps_spec.rb +392 -4
  372. data/spec/mongoid/timestamps_spec_models.rb +67 -0
  373. data/spec/mongoid/touchable_spec.rb +390 -2
  374. data/spec/mongoid/touchable_spec_models.rb +14 -8
  375. data/spec/mongoid/traversable_spec.rb +13 -35
  376. data/spec/mongoid/validatable/associated_spec.rb +27 -34
  377. data/spec/mongoid/validatable/presence_spec.rb +1 -1
  378. data/spec/mongoid/validatable/uniqueness_spec.rb +58 -31
  379. data/spec/mongoid/warnings_spec.rb +35 -0
  380. data/spec/mongoid_spec.rb +34 -16
  381. data/spec/rails/controller_extension/controller_runtime_spec.rb +2 -2
  382. data/spec/rails/mongoid_spec.rb +4 -16
  383. data/spec/spec_helper.rb +5 -0
  384. data/spec/support/constraints.rb +24 -0
  385. data/spec/support/immutable_ids.rb +118 -0
  386. data/spec/support/macros.rb +78 -0
  387. data/spec/support/models/artist.rb +0 -1
  388. data/spec/support/models/augmentation.rb +12 -0
  389. data/spec/support/models/band.rb +5 -0
  390. data/spec/support/models/book.rb +1 -0
  391. data/spec/support/models/building.rb +2 -0
  392. data/spec/support/models/catalog.rb +24 -0
  393. data/spec/support/models/circus.rb +3 -0
  394. data/spec/support/models/cover.rb +10 -0
  395. data/spec/support/models/fanatic.rb +8 -0
  396. data/spec/support/models/implant.rb +9 -0
  397. data/spec/support/models/label.rb +2 -0
  398. data/spec/support/models/lat_lng.rb +6 -0
  399. data/spec/support/models/name.rb +10 -0
  400. data/spec/support/models/passport.rb +9 -0
  401. data/spec/support/models/person.rb +2 -0
  402. data/spec/support/models/player.rb +2 -0
  403. data/spec/support/models/powerup.rb +12 -0
  404. data/spec/support/models/product.rb +1 -0
  405. data/spec/support/models/purse.rb +9 -0
  406. data/spec/support/models/registry.rb +1 -0
  407. data/spec/support/models/school.rb +14 -0
  408. data/spec/support/models/shield.rb +18 -0
  409. data/spec/support/models/student.rb +14 -0
  410. data/spec/support/models/weapon.rb +12 -0
  411. metadata +101 -96
  412. checksums.yaml.gz.sig +0 -0
  413. data/lib/mongoid/errors/eager_load.rb +0 -23
  414. data/lib/mongoid/errors/invalid_value.rb +0 -17
  415. data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +0 -60
  416. data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +0 -60
  417. data/spec/mongoid/errors/eager_load_spec.rb +0 -31
  418. data/spec/shared/LICENSE +0 -20
  419. data/spec/shared/bin/get-mongodb-download-url +0 -17
  420. data/spec/shared/bin/s3-copy +0 -45
  421. data/spec/shared/bin/s3-upload +0 -69
  422. data/spec/shared/lib/mrss/child_process_helper.rb +0 -80
  423. data/spec/shared/lib/mrss/cluster_config.rb +0 -231
  424. data/spec/shared/lib/mrss/constraints.rb +0 -378
  425. data/spec/shared/lib/mrss/docker_runner.rb +0 -291
  426. data/spec/shared/lib/mrss/eg_config_utils.rb +0 -51
  427. data/spec/shared/lib/mrss/event_subscriber.rb +0 -210
  428. data/spec/shared/lib/mrss/lite_constraints.rb +0 -238
  429. data/spec/shared/lib/mrss/server_version_registry.rb +0 -120
  430. data/spec/shared/lib/mrss/session_registry.rb +0 -69
  431. data/spec/shared/lib/mrss/session_registry_legacy.rb +0 -60
  432. data/spec/shared/lib/mrss/spec_organizer.rb +0 -179
  433. data/spec/shared/lib/mrss/utils.rb +0 -15
  434. data/spec/shared/share/Dockerfile.erb +0 -325
  435. data/spec/shared/share/haproxy-1.conf +0 -16
  436. data/spec/shared/share/haproxy-2.conf +0 -17
  437. data/spec/shared/shlib/config.sh +0 -27
  438. data/spec/shared/shlib/distro.sh +0 -74
  439. data/spec/shared/shlib/server.sh +0 -392
  440. data/spec/shared/shlib/set_env.sh +0 -169
  441. data.tar.gz.sig +0 -0
  442. metadata.gz.sig +0 -3
@@ -1,179 +0,0 @@
1
- # frozen_string_literal: true
2
- # encoding: utf-8
3
-
4
- autoload :JSON, 'json'
5
- autoload :FileUtils, 'fileutils'
6
- autoload :Find, 'find'
7
-
8
- module Mrss
9
-
10
- autoload :ChildProcessHelper, 'mrss/child_process_helper'
11
-
12
- # Organizes and runs all of the tests in the test suite in batches.
13
- #
14
- # Organizing the tests in batches serves two purposes:
15
- #
16
- # 1. This allows running unit tests before integration tests, therefore
17
- # in theory revealing failures quicker on average.
18
- # 2. This allows running some tests that have high intermittent failure rate
19
- # in their own test process.
20
- #
21
- # This class aggregates RSpec results after the test runs.
22
- class SpecOrganizer
23
-
24
- class BucketsNotPrioritized < StandardError
25
- end
26
-
27
- def initialize(root: nil, classifiers:, priority_order:,
28
- spec_root: nil, rspec_json_path: nil, rspec_all_json_path: nil,
29
- randomize: false
30
- )
31
- @spec_root = spec_root || File.join(root, 'spec')
32
- @classifiers = classifiers
33
- @priority_order = priority_order
34
- @rspec_json_path = rspec_json_path || File.join(root, 'tmp/rspec.json')
35
- @rspec_all_json_path = rspec_all_json_path || File.join(root, 'tmp/rspec-all.json')
36
- @randomize = !!randomize
37
- end
38
-
39
- attr_reader :spec_root, :classifiers, :priority_order
40
- attr_reader :rspec_json_path, :rspec_all_json_path
41
-
42
- def randomize?
43
- @randomize
44
- end
45
-
46
- def seed
47
- @seed ||= (rand * 100_000).to_i
48
- end
49
-
50
- def buckets
51
- @buckets ||= {}.tap do |buckets|
52
- Find.find(spec_root) do |path|
53
- next unless File.file?(path)
54
- next unless path =~ /_spec\.rb\z/
55
- rel_path = path[(spec_root.length + 1)..path.length]
56
-
57
- found = false
58
- classifiers.each do |(regexp, category)|
59
- if regexp =~ rel_path
60
- buckets[category] ||= []
61
- buckets[category] << File.join('spec', rel_path)
62
- found = true
63
- break
64
- end
65
- end
66
-
67
- unless found
68
- buckets[nil] ||= []
69
- buckets[nil] << File.join('spec', rel_path)
70
- end
71
- end
72
- end.freeze
73
- end
74
-
75
- def ordered_buckets
76
- @ordered_buckets ||= {}.tap do |ordered_buckets|
77
- buckets = self.buckets.dup
78
- priority_order.each do |category|
79
- files = buckets.delete(category)
80
- ordered_buckets[category] = files
81
- end
82
-
83
- if files = buckets.delete(nil)
84
- ordered_buckets[nil] = files
85
- end
86
-
87
- unless buckets.empty?
88
- raise BucketsNotPrioritized, "Some buckets were not prioritized: #{buckets.keys.map(&:to_s).join(', ')}"
89
- end
90
- end.freeze
91
- end
92
-
93
- def run
94
- run_buckets(*buckets.keys)
95
- end
96
-
97
- def run_buckets(*buckets)
98
- FileUtils.rm_f(rspec_all_json_path)
99
-
100
- buckets.each do |bucket|
101
- if bucket && !self.buckets[bucket]
102
- raise "Unknown bucket #{bucket}"
103
- end
104
- end
105
- buckets = Hash[self.buckets.select { |k, v| buckets.include?(k) }]
106
-
107
- failed = []
108
-
109
- priority_order.each do |category|
110
- if files = buckets.delete(category)
111
- unless run_files(category, files)
112
- failed << category
113
- end
114
- end
115
- end
116
- if files = buckets.delete(nil)
117
- unless run_files('remaining', files)
118
- failed << 'remaining'
119
- end
120
- end
121
-
122
- unless buckets.empty?
123
- raise "Some buckets were not executed: #{buckets.keys.map(&:to_s).join(', ')}"
124
- end
125
-
126
- if failed.any?
127
- raise "The following buckets failed: #{failed.map(&:to_s).join(', ')}"
128
- end
129
- end
130
-
131
- def run_files(category, paths)
132
- puts "Running #{category.to_s.gsub('_', ' ')} tests"
133
- FileUtils.rm_f(rspec_json_path)
134
- cmd = %w(rspec) + paths
135
- if randomize?
136
- cmd += %W(--order rand:#{seed})
137
- end
138
-
139
- begin
140
- puts "Running #{cmd.join(' ')}"
141
- ChildProcessHelper.check_call(cmd)
142
- ensure
143
- if File.exist?(rspec_json_path)
144
- if File.exist?(rspec_all_json_path)
145
- merge_rspec_results
146
- else
147
- FileUtils.cp(rspec_json_path, rspec_all_json_path)
148
- end
149
- end
150
- end
151
-
152
- true
153
- rescue ChildProcessHelper::SpawnError
154
- false
155
- end
156
-
157
- def merge_rspec_results
158
- all = JSON.parse(File.read(rspec_all_json_path))
159
- new = JSON.parse(File.read(rspec_json_path))
160
- all['examples'] += new.delete('examples')
161
- new.delete('summary').each do |k, v|
162
- all['summary'][k] += v
163
- end
164
- new.delete('version')
165
- new.delete('summary_line')
166
- # The spec organizer runs all buckets with the same seed, hence
167
- # we can drop the seed from new results.
168
- new.delete('seed')
169
- unless new.empty?
170
- raise "Unhandled rspec results keys: #{new.keys.join(', ')}"
171
- end
172
- # We do not merge summary lines, delete them from aggregated results
173
- all.delete('summary_line')
174
- File.open(rspec_all_json_path, 'w') do |f|
175
- f << JSON.dump(all)
176
- end
177
- end
178
- end
179
- end
@@ -1,15 +0,0 @@
1
- # frozen_string_literal: true
2
- # encoding: utf-8
3
-
4
- module Mrss
5
- module Utils
6
-
7
- module_function def print_backtrace(dest=STDERR)
8
- begin
9
- hello world
10
- rescue => e
11
- dest.puts e.backtrace.join("\n")
12
- end
13
- end
14
- end
15
- end
@@ -1,325 +0,0 @@
1
- # Python toolchain as of this writing is available on rhel62, debian92 and
2
- # ubuntu1604.
3
- #
4
- # To run rhel62 in docker, host system must be configured to emulate syscalls:
5
- # https://github.com/CentOS/sig-cloud-instance-images/issues/103
6
-
7
- <%
8
-
9
- python_toolchain_url = "https://s3.amazonaws.com//mciuploads/mongo-python-driver-toolchain/#{distro}/ba92de2700c04ee2d4f82c3ffdfc33105140cb04/mongo_python_driver_toolchain_#{distro.gsub('-', '_')}_ba92de2700c04ee2d4f82c3ffdfc33105140cb04_19_11_14_15_33_33.tar.gz"
10
- server_version = '4.3.3'
11
- server_url = "http://downloads.10gen.com/linux/mongodb-linux-x86_64-enterprise-#{distro}-#{server_version}.tgz"
12
- server_archive_basename = File.basename(server_url)
13
- server_extracted_dir = server_archive_basename.sub(/\.(tar\.gz|tgz)$/, '')
14
-
15
- # When changing, also update the hash in shlib/set_env.sh.
16
- TOOLCHAIN_VERSION='219833abad4d9d3bf43c0fef101a8ca082ac4ae9'
17
-
18
- def ruby_toolchain_url(ruby)
19
- "http://boxes.10gen.com/build/toolchain-drivers/mongo-ruby-driver/#{TOOLCHAIN_VERSION}/#{distro}/#{ruby}.tar.xz"
20
- end
21
-
22
- #ruby_toolchain_url = "https://s3.amazonaws.com//mciuploads/mongo-ruby-toolchain/#{distro}/#{TOOLCHAIN_VERSION}/mongo_ruby_driver_toolchain_#{distro.gsub('-', '_')}_patch_#{TOOLCHAIN_VERSION}_#{toolchain_lower}.tar.gz"
23
-
24
- %>
25
-
26
- FROM <%= base_image %>
27
-
28
- ENV DOCKER=1
29
-
30
- <% if debian? %>
31
-
32
- ENV DEBIAN_FRONTEND=noninteractive
33
-
34
- <% else %>
35
-
36
- RUN echo assumeyes=1 |tee -a /etc/yum.conf
37
-
38
- <% end %>
39
-
40
- <% if ruby_head? %>
41
-
42
- # To use current versions of mlaunch, Python 3.7+ is required.
43
- # Many distros ship with older Pythons, therefore we need to install
44
- # a newer Python from somewhere. This section installs the Python
45
- # toolchain which comes with recent Pythons.
46
-
47
- #RUN curl --retry 3 -fL <%= python_toolchain_url %> -o python-toolchain.tar.gz
48
- #RUN tar -xC /opt -zf python-toolchain.tar.gz
49
-
50
- <% end %>
51
-
52
- <% if debian? %>
53
-
54
- # zsh is not required for any scripts but it is a better interactive shell
55
- # than bash.
56
- # Ruby runtime dependencies: libyaml-0-2
57
- # Compiling ruby libraries: gcc make
58
- # Compiling python packages: python3-dev
59
- # JRuby: openjdk-8-jdk-headless
60
- # Server dependencies: libsnmp30 libcurl3/libcurl4
61
- # Determining OS we are running on: lsb-release
62
- # Load balancer testing: haproxy
63
- # Kerberos testing: krb5-user
64
- # Local Kerberos server: krb5-kdc krb5-admin-server
65
- # Installing mlaunch from git: git
66
- # ruby-head archive: bzip2
67
- # nio4r on JRuby: libgmp-dev
68
- # Snappy compression: libsnappy-dev
69
- # nokogiri: zlib1g-dev
70
- # Mongoid testing: tzdata shared-mime-info
71
- # Mongoid application testing: nodejs (8.x or newer)
72
- # Test suite: procps for ps (to kill JRubies)
73
- #
74
- # We currently use Python 2-compatible version of mtools, which
75
- # is installable via pip (which uses Python 2). All of the MongoDB
76
- # distros have pip installed (but none as of this writing have pip3)
77
- # therefore install python-pip in all configurations here.
78
-
79
- <% packages = %w(
80
- procps lsb-release bzip2 curl zsh
81
- git make gcc libyaml-0-2 libgmp-dev zlib1g-dev libsnappy-dev
82
- krb5-user krb5-kdc krb5-admin-server libsasl2-dev libsasl2-modules-gssapi-mit
83
- haproxy
84
- python3-pip
85
- tzdata shared-mime-info
86
- ) %>
87
-
88
- <% if distro =~ /ubuntu2004/ %>
89
- <% packages << 'libsnmp35' %>
90
- <% else %>
91
- <% packages << 'libsnmp30' %>
92
- <% end %>
93
-
94
- <% if distro !~ /ubuntu2004/ %>
95
- <% packages << 'python-pip' %>
96
- <% end %>
97
-
98
- <% if distro =~ /debian10/ %>
99
- <% packages << 'openjdk-11-jdk-headless' %>
100
- <% elsif distro =~ /ubuntu1404/ %>
101
- # Ubuntu 14.04 only has openjdk 7, this is too old to be useful
102
- <% else %>
103
- <% packages << 'openjdk-8-jdk-headless' %>
104
- <% end %>
105
-
106
- # ubuntu1404, ubuntu1604: libcurl3
107
- # ubuntu1804, ubuntu2004, debian10: libcurl4
108
- <% if distro =~ /ubuntu1804|ubuntu2004|debian10/ %>
109
- <% packages << 'libcurl4' %>
110
- <% else %>
111
- <% packages << 'libcurl3' %>
112
- <% end %>
113
-
114
- <% if distro =~ /ubuntu1804|ubuntu2004/ %>
115
- <% packages << 'nodejs' %>
116
- <% end %>
117
-
118
- <% if distro =~ /ubuntu2004/ %>
119
- <% packages += %w(ruby ruby2.7 bundler) %>
120
- <% end %>
121
-
122
- RUN apt-get update && apt-get install -y <%= packages.join(' ') %>
123
-
124
- <% else %>
125
-
126
- <% if distro =~ /rhel6/ %>
127
-
128
- # CentOS 6 is dead - to use it retrieve the packages from vault:
129
- # https://stackoverflow.com/questions/53562691/error-cannot-retrieve-repository-metadata-repomd-xml-for-repository-base-pl
130
-
131
- <%
132
-
133
- cfg = <<-CFG
134
- [base]
135
- name=CentOS-$releasever - Base
136
- #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
137
- #baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
138
- baseurl=http://vault.centos.org/6.10/os/x86_64/
139
- gpgcheck=1
140
- gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
141
- CFG
142
-
143
- %>
144
-
145
- RUN printf "<%= cfg.gsub("\n", "\\n") %>" >/etc/yum.repos.d/CentOS-Base.repo
146
-
147
- <% end %>
148
-
149
- # Enterprise server: net-snmp
150
- # lsb_release: redhat-lsb-core
151
- # our runner scripts: which
152
- # Ruby dependency: libyaml
153
- # compiling python packages: gcc python-devel
154
- # Kerberos tests: krb5-workstation + cyrus-sasl-devel to build the
155
- # mongo_kerberos gem + cyrus-sasl-gssapi for authentication to work
156
- # Local Kerberos server: krb5-server
157
- # JRuby: java-1.8.0-openjdk
158
- #
159
- # Note: lacking cyrus-sasl-gssapi produces a cryptic message
160
- # "SASL(-4): no mechanism available: No worthy mechs found"
161
- # https://github.com/farorm/python-ad/issues/10
162
-
163
- RUN yum install -y redhat-lsb-core which git gcc libyaml krb5-server \
164
- krb5-workstation cyrus-sasl-devel cyrus-sasl-gssapi java-1.8.0-openjdk \
165
- net-snmp python3
166
-
167
- <% if distro =~ /rhel6/ %>
168
-
169
- # RHEL 6 ships with Python 2.6.
170
-
171
- RUN yum install -y centos-release-scl && \
172
- yum install -y python27-python python27-python-devel
173
- ENV PATH=/opt/rh/python27/root/usr/bin:$PATH \
174
- LD_LIBRARY_PATH=/opt/rh/python27/root/usr/lib64
175
-
176
- <% else %>
177
-
178
- RUN yum install -y python-devel
179
-
180
- <% end %>
181
-
182
- <% end %>
183
-
184
- <% if preload? %>
185
-
186
- <% if distro =~ /debian9|ubuntu1604|ubuntu1804/ %>
187
- # Install python 3.7 for mlaunch.
188
- RUN curl -fL --retry 3 https://github.com/p-mongodb/deps/raw/main/<%= distro %>-python37.tar.xz | \
189
- tar xfJ - -C /opt
190
- ENV PATH=/opt/python37/bin:$PATH
191
- RUN python3 -V
192
- <% end %>
193
-
194
- <% if true || distro =~ /rhel|ubuntu1604/ %>
195
-
196
- # Ubuntu 12.04 ships pip 1.0 which is ancient and does not work.
197
- #
198
- # Ubuntu 16.04 apparently also ships a pip that does not work:
199
- # https://stackoverflow.com/questions/37495375/python-pip-install-throws-typeerror-unsupported-operand-types-for-retry
200
- # Potentially this only affects environments with less than ideal
201
- # connectivity (or, perhaps, when python package registry is experiencing
202
- # availability issues) when pip must retry to install packages.
203
- #
204
- # rhel apparently does not package pip at all in core repoitories,
205
- # therefore install it the manual way.
206
- #
207
- # https://pip.pypa.io/en/stable/installing/
208
- RUN curl --retry 3 -fL https://bootstrap.pypa.io/pip/get-pip.py | python3
209
- RUN python3 -m pip install --upgrade pip setuptools wheel
210
-
211
- <% end %>
212
-
213
- # Current virtualenv fails with
214
- # https://github.com/pypa/virtualenv/issues/1630
215
- <% mtools = 'legacy' %>
216
- <% case mtools
217
- when 'legacy' %>
218
- # dateutil dependency is missing in mtools: https://github.com/rueckstiess/mtools/issues/864
219
- RUN python3 -m pip install 'virtualenv<20' 'mtools-legacy[mlaunch]' 'pymongo<4' python-dateutil
220
- <% when 'git' %>
221
- # dateutil dependency is missing in mtools: https://github.com/rueckstiess/mtools/issues/864
222
- RUN python3 -m pip install virtualenv 'pymongo>=4' python-dateutil psutil
223
-
224
- # Install mtools from git because released versions do not work with pymongo 4.0
225
- RUN git clone https://github.com/p-mongodb/mtools && \
226
- cd mtools && \
227
- python3 setup.py install
228
- <% else %>
229
- # mtools[mlaunch] does not work: https://github.com/rueckstiess/mtools/issues/856
230
- # dateutil dependency is missing in mtools: https://github.com/rueckstiess/mtools/issues/864
231
- RUN python3 -m pip install virtualenv 'pymongo>=4' python-dateutil psutil mtools
232
- <% end %>
233
-
234
- <% if @env.fetch('MONGODB_VERSION') >= '4.4' %>
235
- # ubuntu1604 installs MarkupSafe 0.0.0 here instead of 2.0.0+
236
- # as specified by dependencies, causing OCSP mock to not work.
237
- RUN python3 -mpip install asn1crypto oscrypto flask --upgrade
238
- <% end %>
239
-
240
- # FLE is tested against 4.0+ servers.
241
- <% if @env.fetch('MONGODB_VERSION') >= '4.0' %>
242
- # Requirements in drivers-evergreen-tools:
243
- # boto3~=1.19 cryptography~=3.4.8 pykmip~=0.10.0
244
- # cryptography does not install due to lacking setuptools_rust
245
- # (either that version or anything that isn't part of system packages)
246
- RUN python3 -mpip install boto3~=1.19 cryptography pykmip~=0.10.0
247
- <% end %>
248
-
249
- <% unless ruby_head? || system_ruby? %>
250
-
251
- RUN curl --retry 3 -fL <%= ruby_toolchain_url(ruby) %> |tar -xC /opt -Jf -
252
- ENV PATH=/opt/rubies/<%= ruby %>/bin:$PATH \
253
- USE_OPT_TOOLCHAIN=1
254
- #ENV PATH=/opt/rubies/python/3/bin:$PATH
255
-
256
- <% end %>
257
-
258
- RUN curl --retry 3 -fL <%= server_download_url %> |tar xzf - && \
259
- mv mongo*/ /opt/mongodb
260
- ENV USE_OPT_MONGODB=1 USE_SYSTEM_PYTHON_PACKAGES=1
261
-
262
- <% end %>
263
-
264
- <% if distro =~ /debian|ubuntu/ %>
265
- # mkdir was moved from /usr/bin to /bin and MongoDB's distros
266
- # apparently keep using the old location.
267
- # This definitely affects debian10.
268
- # https://stackoverflow.com/questions/64653051/make-usr-bin-mkdir-command-not-found-during-gem-install-nokogiri-in-ubuntu
269
- RUN test -f /usr/bin/mkdir || ln -s /bin/mkdir /usr/bin/mkdir
270
- <% end %>
271
-
272
- WORKDIR /app
273
-
274
- <% if preload? && !ruby_head? %>
275
-
276
- COPY Gemfile .
277
- COPY gemfiles gemfiles
278
- COPY *.gemspec .
279
- COPY lib/<%= project_lib_subdir %>/version.rb lib/<%= project_lib_subdir %>/version.rb
280
- RUN bundle install
281
- COPY .evergreen/patch-debuggers .evergreen/patch-debuggers
282
- <% if system_ruby? %>
283
- # Running under docker with root access
284
- RUN .evergreen/patch-debuggers /var/lib/gems
285
- <% else %>
286
- RUN .evergreen/patch-debuggers /opt/rubies
287
- <% end %>
288
-
289
- <% end %>
290
-
291
- <% if fle? %>
292
- RUN curl --retry 3 -fL "https://s3.amazonaws.com/mciuploads/libmongocrypt/all/master/latest/libmongocrypt-all.tar.gz" |tar zxf -
293
-
294
- <%= "ENV LIBMONGOCRYPT_PATH #{libmongocrypt_path}" %>
295
- <% end %>
296
-
297
- <% if preload? %>
298
- ENV DOCKER_PRELOAD=1
299
- <% end %>
300
-
301
- ENV MONGO_ORCHESTRATION_HOME=/tmpfs \
302
- PROJECT_DIRECTORY=/app \
303
- <%= @env.map { |k, v| %Q`#{k}="#{v.gsub('$', "\\$").gsub('"', "\\\"")}"` }.join(" \\\n ") %>
304
-
305
- <% if interactive? %>
306
- ENV INTERACTIVE=1
307
- <% end %>
308
-
309
- COPY . .
310
-
311
- <% if expose? %>
312
-
313
- <% ports = [] %>
314
-
315
- <% 0.upto(num_exposed_ports-1) do |i| %>
316
- <% ports << 27017 + i %>
317
- <% end %>
318
-
319
- <% if @env['OCSP_ALGORITHM'] %>
320
- <% ports << 8100 %>
321
- <% end %>
322
-
323
- EXPOSE <%= ports.map(&:to_s).join(' ') %>
324
-
325
- <% end %>
@@ -1,16 +0,0 @@
1
- # Modeled after
2
- # https://github.com/mongodb-labs/drivers-evergreen-tools/blob/master/.evergreen/run-load-balancer.sh
3
-
4
- defaults
5
- mode tcp
6
- timeout connect 7s
7
- timeout client 55s
8
- timeout server 55s
9
-
10
- frontend mongos_frontend
11
- bind *:27017
12
- use_backend mongos_backend
13
-
14
- backend mongos_backend
15
- mode tcp
16
- server mongos_one 127.0.0.1:27117 check
@@ -1,17 +0,0 @@
1
- # Modeled after
2
- # https://github.com/mongodb-labs/drivers-evergreen-tools/blob/master/.evergreen/run-load-balancer.sh
3
-
4
- defaults
5
- mode tcp
6
- timeout connect 7s
7
- timeout client 55s
8
- timeout server 55s
9
-
10
- frontend mongos_frontend
11
- bind *:27017
12
- use_backend mongos_backend
13
-
14
- backend mongos_backend
15
- mode tcp
16
- server mongos_one 127.0.0.1:27117 check
17
- server mongos_two 127.0.0.1:27118 check
@@ -1,27 +0,0 @@
1
- show_local_instructions_impl() {
2
- local arch="$1"
3
- shift
4
-
5
- echo To test this configuration locally:
6
- local params=
7
- while test -n "$1"; do
8
- key="$1"
9
- shift
10
- # ${!foo} syntax is bash specific:
11
- # https://stackoverflow.com/questions/14049057/bash-expand-variable-in-a-variable
12
- value="${!key}"
13
- if test -n "$value"; then
14
- params="$params $key=$value"
15
- fi
16
- done
17
-
18
- # $0 has the current script being executed which is also the script that
19
- # was initially invoked EXCEPT for the AWS configurations which use the
20
- # wrapper script.
21
- if echo "$AUTH" |grep -q ^aws; then
22
- script=.evergreen/run-tests-aws-auth.sh
23
- else
24
- script="$0"
25
- fi
26
- echo ./.evergreen/test-on-docker -d $arch $params -s "$script"
27
- }
@@ -1,74 +0,0 @@
1
- detected_distro=
2
-
3
- host_distro() {
4
- if test -z "$detected_distro"; then
5
- detected_distro=`_detect_distro`
6
- fi
7
- echo "$detected_distro"
8
- }
9
-
10
- _detect_distro() {
11
- local distro
12
- distro=
13
- if test -f /etc/debian_version; then
14
- # Debian or Ubuntu
15
- if test "`uname -m`" = aarch64; then
16
- release=`lsb_release -rs |tr -d .`
17
- distro="ubuntu$release"-arm
18
- elif lsb_release -is |grep -q Debian; then
19
- release=`lsb_release -rs |tr -d .`
20
- # In docker, release is something like 9.11.
21
- # In evergreen, release is 9.2.
22
- release=`echo $release |sed -e 's/^9.*/92/'`
23
- distro="debian$release"
24
- elif lsb_release -is |grep -q Ubuntu; then
25
- if test "`uname -m`" = ppc64le; then
26
- release=`lsb_release -rs |tr -d .`
27
- distro="ubuntu$release-ppc"
28
- else
29
- release=`lsb_release -rs |tr -d .`
30
- distro="ubuntu$release"
31
- fi
32
- else
33
- echo 'Unknown Debian flavor' 1>&2
34
- exit 1
35
- fi
36
- elif lsb_release -is |grep -qi suse; then
37
- if test "`uname -m`" = s390x; then
38
- release=`lsb_release -rs |sed -e 's/\..*//'`
39
- distro="suse$release-s390x"
40
- else
41
- echo 'Unknown Suse arch' 1>&2
42
- exit 1
43
- fi
44
- elif test -f /etc/redhat-release; then
45
- # RHEL or CentOS
46
- if test "`uname -m`" = s390x; then
47
- distro=rhel72-s390x
48
- elif test "`uname -m`" = ppc64le; then
49
- distro=rhel71-ppc
50
- elif lsb_release >/dev/null 2>&1; then
51
- if lsb_release -is |grep -q RedHat; then
52
- release=`lsb_release -rs |tr -d .`
53
- distro="rhel$release"
54
- elif lsb_release -is |grep -q CentOS; then
55
- release=`lsb_release -rs |cut -c 1 |sed -e s/7/70/ -e s/6/62/ -e s/8/80/`
56
- distro="rhel$release"
57
- else
58
- echo 'Unknown RHEL flavor' 1>&2
59
- exit 1
60
- fi
61
- else
62
- echo lsb_release missing, using /etc/redhat-release 1>&2
63
- release=`grep -o 'release [0-9]' /etc/redhat-release |awk '{print $2}'`
64
- release=`echo $release |sed -e s/7/70/ -e s/6/62/ -e s/8/80/`
65
- distro=rhel$release
66
- fi
67
- else
68
- lsb_release -a
69
- echo 'Unknown distro' 1>&2
70
- exit 1
71
- fi
72
- echo "Detected distro: $distro" 1>&2
73
- echo $distro
74
- }