You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by ii...@apache.org on 2019/07/29 11:26:04 UTC

[couchdb] branch exunit-simplified created (now 02b0421)

This is an automated email from the ASF dual-hosted git repository.

iilyak pushed a change to branch exunit-simplified
in repository https://gitbox.apache.org/repos/asf/couchdb.git.


      at 02b0421  Update .travis.yml

This branch includes the following new commits:

     new f33378b  Fix credo complains for dreyfus
     new d584962  Minimal ExUnit setup
     new cf60cff  Move eunit tests into test/eunit directory
     new d0ccfa2  Add chained setups
     new 74a1007  Unify runners for unit and integration tests
     new 02b0421  Update .travis.yml

The 6 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[couchdb] 04/06: Add chained setups

Posted by ii...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

iilyak pushed a commit to branch exunit-simplified
in repository https://gitbox.apache.org/repos/asf/couchdb.git

commit d0ccfa2b463b7087c1c3a766ca3ae963c1d1738d
Author: ILYA Khlopotov <ii...@apache.org>
AuthorDate: Mon May 27 19:17:16 2019 +0000

    Add chained setups
---
 test/elixir/README.md             | 143 ++++++++++++++++++++++++++++++++++++++
 test/elixir/lib/ex_unit.ex        |  44 ++++++++++++
 test/elixir/lib/setup.ex          |  97 ++++++++++++++++++++++++++
 test/elixir/lib/setup/common.ex   |  22 ++++++
 test/elixir/lib/step.ex           |  44 ++++++++++++
 test/elixir/lib/step/config.ex    |  33 +++++++++
 test/elixir/lib/step/create_db.ex |  53 ++++++++++++++
 test/elixir/lib/step/start.ex     |  85 ++++++++++++++++++++++
 test/elixir/lib/step/user.ex      | 104 +++++++++++++++++++++++++++
 test/elixir/lib/utils.ex          |  60 ++++++++++++++++
 10 files changed, 685 insertions(+)

diff --git a/test/elixir/README.md b/test/elixir/README.md
index a59b4df..f7691ad 100644
--- a/test/elixir/README.md
+++ b/test/elixir/README.md
@@ -111,3 +111,146 @@ X means done, - means partially
   - [ ] Port view_pagination.js
   - [ ] Port view_sandboxing.js
   - [ ] Port view_update_seq.js
+
+# Using ExUnit to write unit tests
+
+Elixir has a number of benefits which makes writing unit tests easier.
+For example it is trivial to do codegeneration of tests.
+Bellow we present a few use cases where code-generation is really helpful.
+
+## How to write ExUnit tests
+
+1. Create new file in test/exunit/ directory (the file name should match *_test.exs)
+2. In case it is a first file in the directory create test_helper.exs (look at src/couch/test/exunit/test_helper.exs to get an idea)
+3. define test module which does `use Couch.Test.ExUnit.Case`
+4. Define test cases in the module
+
+You can run tests either:
+- using make: `make exunit`
+- using mix: BUILDDIR=`pwd` ERL_LIBS=`pwd`/src MIX_ENV=test mix test --trace
+
+## Generating tests from spec
+
+Sometimes we have some data in structured format and want
+to generate test cases using that data. This is easy in Elixir.
+For example suppose we have following spec:
+```
+{
+	"{db_name}/_view_cleanup": {
+		"roles": ["_admin"]
+    }
+}
+```
+We can use this spec to generate test cases
+```
+defmodule GenerateTestsFromSpec do
+  use ExUnit.Case
+  require Record
+  Record.defrecordp :user_ctx, Record.extract(:user_ctx, from_lib: "couch/include/couch_db.hrl")
+  Record.defrecordp :httpd, Record.extract(:httpd, from_lib: "couch/include/couch_db.hrl")
+
+  {:ok, spec_bin} = File.read("roles.json")
+  spec = :jiffy.decode(spec_bin, [:return_maps])
+  Enum.each spec, fn {path, path_spec} ->
+    roles = path_spec["roles"]
+    @roles roles
+    @path_parts String.split(path, "/")
+    test "Access with `#{inspect(roles)}` roles" do
+      req = httpd(path_parts: @path_parts, user_ctx: user_ctx(roles: @roles))
+      :chttpd_auth_request.authorize_request(req)
+    end
+  end
+end
+```
+As a result we would get
+```
+GenerateTestsFromSpec
+  * test Access with `["_admin"]` roles (0.00ms)
+```
+
+## Test all possible combinations
+
+Sometimes we want to test all possible permutations for parameters.
+This can be accomplished using something like the following:
+
+```
+defmodule Permutations do
+  use ExUnit.Case
+  pairs = :couch_tests_combinatorics.product([
+    [:remote, :local], [:remote, :local]
+  ])
+  for [source, dest] <- pairs do
+    @source source
+    @dest dest
+    test "Replication #{source} -> #{dest}" do
+     assert :ok == :ok
+    end
+  end
+end
+```
+
+This would produce following tests
+```
+Permutations
+  * test Replication remote -> remote (0.00ms)
+  * test Replication local -> remote (0.00ms)
+  * test Replication remote -> local (0.00ms)
+  * test Replication local -> local (0.00ms)
+```
+
+## Reuseing of common setups
+
+The setup functions are quite similar in lots of tests therefore it makes
+sense to reuse them. The idea is to add shared setup functions into either
+- test/elixir/lib/setup/common.ex
+- test/elixir/lib/setup/<something>.ex
+
+The setup functions looks like the following:
+```
+defmodule Foo do
+  alias Couch.Test.Setup.Step
+
+  def httpd_with_admin(setup) do
+    setup
+      |> Step.Start.new(:start, extra_apps: [:chttpd])
+      |> Step.User.new(:admin, roles: [:server_admin])
+  end
+end
+```
+
+These parts of a setup chain can be invoked as follows:
+```
+defmodule Couch.Test.CRUD do
+  use Couch.Test.ExUnit.Case
+  alias Couch.Test.Utils
+
+  alias Couch.Test.Setup
+
+  alias Couch.Test.Setup.Step
+
+  def with_db(context, setup) do
+    setup =
+      setup
+      |> Setup.Common.httpd_with_db()
+      |> Setup.run()
+
+    context =
+      Map.merge(context, %{
+        db_name: setup |> Setup.get(:db) |> Step.Create.DB.name(),
+        base_url: setup |> Setup.get(:start) |> Step.Start.clustered_url(),
+        user: setup |> Setup.get(:admin) |> Step.User.name()
+      })
+
+    {context, setup}
+  end
+
+  describe "Database CRUD using Fabric API" do
+    @describetag setup: &__MODULE__.with_db/2
+    test "Create DB", ctx do
+      IO.puts("base_url: #{ctx.base_url}")
+      IO.puts("admin: #{ctx.user}")
+      IO.puts("db_name: #{ctx.db_name}")
+    end
+  end
+end
+```
\ No newline at end of file
diff --git a/test/elixir/lib/ex_unit.ex b/test/elixir/lib/ex_unit.ex
new file mode 100644
index 0000000..7abba07
--- /dev/null
+++ b/test/elixir/lib/ex_unit.ex
@@ -0,0 +1,44 @@
+defmodule Couch.Test.ExUnit.Case do
+  @moduledoc """
+  Template for ExUnit test case. It can be used as follows:
+  ```
+  defmodule Couch.Test.CRUD do
+    use Couch.Test.ExUnit.Case
+    ...
+    def with_db(context, setup) do
+      setup = setup
+        |> Step.Start.new(:start, extra_apps: [:chttpd])
+        |> Setup.run
+      context = Map.merge(context, %{
+        base_url: setup |> Setup.get(:start) |> Step.Start.clustered_url
+      })
+      {context, setup}
+    end
+    describe "Group of tests" do
+    @describetag setup: &__MODULE__.with_db/2
+    test "Single test in a group", ctx do
+      ctx.base_url
+    end
+    ...
+  end
+  ```
+  """
+
+  use ExUnit.CaseTemplate
+  alias Couch.Test.Setup
+
+  using do
+    quote do
+      require Logger
+      use ExUnit.Case
+    end
+  end
+
+  setup context do
+    case context do
+      %{:setup => setup_fun} ->
+        {:ok, Setup.setup(context, setup_fun)}
+      _ -> {:ok, context}
+    end
+  end
+end
\ No newline at end of file
diff --git a/test/elixir/lib/setup.ex b/test/elixir/lib/setup.ex
new file mode 100644
index 0000000..0379885
--- /dev/null
+++ b/test/elixir/lib/setup.ex
@@ -0,0 +1,97 @@
+defmodule Couch.Test.Setup do
+  @moduledoc """
+  Allows to chain setup functions.
+  Example of using:
+
+  ```
+    alias Couch,Test.Utils
+    def with_db_name(context, setup) do
+      setup =
+        setup
+          |> Step.Start.new(:start, extra_apps: [:chttpd])
+          |> Step.User.new(:admin, roles: [:server_admin])
+          |> Setup.run()
+
+      context =
+        Map.merge(context, %{
+          db_name: Utils.random_name("db")
+          base_url: setup |> Setup.get(:start) |> Step.Start.clustered_url(),
+          user: setup |> Setup.get(:admin) |> Step.User.name()
+        })
+      {context, setup}
+    end
+
+    @tag setup: &__MODULE__.with_db_name/2
+      test "Create", %{db_name: db_name, user: user} do
+        ...
+      end
+  ```
+  """
+  import ExUnit.Callbacks, only: [on_exit: 1]
+  import ExUnit.Assertions, only: [assert: 2]
+  require Logger
+
+  alias Couch.Test.Setup
+  alias Couch.Test.Setup.Step
+  defstruct stages: [], by_type: %{}, state: %{}
+
+  def step(%Setup{stages: stages} = setup, id, step) do
+    %{setup | stages: [{id, step} | stages]}
+  end
+
+  defp setup_step({id, step}, %Setup{state: state, by_type: by_type} = setup) do
+    %module{} = step
+    # credo:disable-for-next-line Credo.Check.Warning.LazyLogging
+    Logger.debug("Calling 'setup/2' for '#{module}'")
+    step = module.setup(setup, step)
+    state = Map.put(state, id, step)
+    by_type = Map.update(by_type, module, [id], fn ids -> [id | ids] end)
+    on_exit(fn ->
+      # credo:disable-for-next-line Credo.Check.Warning.LazyLogging
+      Logger.debug("Calling 'teardown/3' for '#{module}'")
+      try do
+        module.teardown(setup, step)
+        :ok
+      catch
+        _ -> :ok
+        _, _ -> :ok
+      end
+    end)
+    {{id, step}, %{setup | state: state, by_type: by_type}}
+  end
+
+  def run(%Setup{stages: stages} = setup) do
+    {stages, setup} = stages
+      |> Enum.reverse
+      |> Enum.map_reduce(setup, &setup_step/2)
+    %{setup | stages: stages}
+  end
+
+  def setup(ctx) do
+    Map.get(ctx, :__setup)
+  end
+
+  def setup(ctx, setup_fun) do
+    setup = %Setup{} |> Step.Config.new(:test_config, config_file: nil)
+    {ctx, setup} = setup_fun.(ctx, setup)
+    assert not Map.has_key?(ctx, :__setup), "Key `__setup` is reserved for internal purposes"
+    Map.put(ctx, :__setup, setup)
+  end
+
+  def completed?(%Setup{by_type: by_type}, step) do
+    Map.has_key?(by_type, step)
+  end
+
+  def all_for(%Setup{by_type: by_type, state: state}, step_module) do
+    Map.take(state, by_type[step_module] || [])
+  end
+
+  def reduce_for(setup, step_module, acc, fun) do
+    Enum.reduce(all_for(setup, step_module), acc, fun)
+  end
+
+  def get(%Setup{state: state}, id) do
+    state[id]
+  end
+
+end
\ No newline at end of file
diff --git a/test/elixir/lib/setup/common.ex b/test/elixir/lib/setup/common.ex
new file mode 100644
index 0000000..3b59e94
--- /dev/null
+++ b/test/elixir/lib/setup/common.ex
@@ -0,0 +1,22 @@
+defmodule Couch.Test.Setup.Common do
+  @moduledoc """
+  A set of common setup pipelines for reuse
+
+  - httpd_with_admin - chttpd is started and new admin is created
+  - httpd_with_db - httpd_with_admin and new database is created
+  """
+  alias Couch.Test.Setup.Step
+
+  def httpd_with_admin(setup) do
+    setup
+      |> Step.Start.new(:start, extra_apps: [:chttpd])
+      |> Step.User.new(:admin, roles: [:server_admin])
+  end
+
+  def httpd_with_db(setup) do
+    setup
+      |> httpd_with_admin()
+      |> Step.Create.DB.new(:db)
+  end
+
+end
\ No newline at end of file
diff --git a/test/elixir/lib/step.ex b/test/elixir/lib/step.ex
new file mode 100644
index 0000000..316d765
--- /dev/null
+++ b/test/elixir/lib/step.ex
@@ -0,0 +1,44 @@
+defmodule Couch.Test.Setup.Step do
+  @moduledoc """
+  A behaviour module for implementing custom setup steps for future reuse.
+
+  Every module implementing this behaviour must implement following three functions:
+  - new
+  - setup
+  - teardown
+
+  Here is an example of a custom step
+  ```
+  defmodule Couch.Test.Setup.Step.Foo do
+
+    alias Couch.Test.Setup
+
+    defstruct [:foo_data, :foo_arg]
+
+    def new(setup, id, arg: arg) do
+      setup |> Setup.step(id, %__MODULE__{foo_arg: arg})
+    end
+
+    def setup(_setup, %__MODULE__{foo_arg: arg} = step) do
+      ...
+      foo_data = ...
+      %{step | foo_data: foo_data}
+    end
+
+    def teardown(_setup, _step) do
+    end
+
+    def get_data(%__MODULE__{foo_data: data}) do
+      data
+    end
+  end
+  ```
+  """
+  @type t :: struct()
+  @callback new(setup :: %Couch.Test.Setup{}, id :: atom(), args: Keyword.t()) ::
+    %Couch.Test.Setup{}
+  @callback setup(setup :: %Couch.Test.Setup{}, step :: t()) ::
+    t()
+  @callback teardown(setup :: %Couch.Test.Setup{}, step :: t()) ::
+    any()
+end
\ No newline at end of file
diff --git a/test/elixir/lib/step/config.ex b/test/elixir/lib/step/config.ex
new file mode 100644
index 0000000..9d9ac8e
--- /dev/null
+++ b/test/elixir/lib/step/config.ex
@@ -0,0 +1,33 @@
+defmodule Couch.Test.Setup.Step.Config do
+  @moduledoc """
+    This setup reads configuration for a test run.
+    It is not supposed to be called manually.
+  """
+
+  alias Couch.Test.Setup
+
+  defstruct [:config, :config_file]
+
+  def new(setup, id, config_file: config_file) do
+    setup |> Setup.step(id, %__MODULE__{config_file: config_file})
+  end
+
+  def setup(_setup, %__MODULE__{config_file: config_file} = step) do
+    # TODO we would need to access config file here
+    %{step | config: %{
+       backdoor: %{
+         protocol: "http"
+       },
+       clustered: %{
+         protocol: "http"
+       }
+    }}
+  end
+
+  def teardown(_setup, _step) do
+  end
+
+  def get(%__MODULE__{config: config}) do
+    config
+  end
+end
\ No newline at end of file
diff --git a/test/elixir/lib/step/create_db.ex b/test/elixir/lib/step/create_db.ex
new file mode 100644
index 0000000..3cca3c5
--- /dev/null
+++ b/test/elixir/lib/step/create_db.ex
@@ -0,0 +1,53 @@
+defmodule Couch.Test.Setup.Step.Create.DB do
+  @moduledoc """
+    This setup step creates a database with given name.
+    If name is not provided random name would be used.
+
+    Example
+      setup
+        ...
+        |> Setup.Step.Create.DB.new(:db)
+        ...
+        |> Setup.run
+      ...
+
+      db_name = setup |> Setup.get(:db) |> Setup.Step.Create.DB.name
+  """
+  alias Couch.Test.Setup
+  alias Couch.Test.Setup.Step
+  alias Couch.Test.Utils
+
+  defstruct [:name]
+
+  import ExUnit.Assertions, only: [assert: 1, assert: 2]
+
+  import Utils
+
+  @admin {:user_ctx, user_ctx(roles: ["_admin"])}
+
+  def new(setup, id) do
+    new(setup, id,  name: Utils.random_name("db"))
+  end
+
+  def new(setup, id, name: name) do
+    setup |> Setup.step(id, %__MODULE__{name: name})
+  end
+
+  def setup(setup, %__MODULE__{name: name} = step) do
+    assert Setup.completed?(setup, Step.Start), "Require `Start` step"
+    assert :fabric in Step.Start.apps(), "Fabric is not started"
+    res = :fabric.create_db(name, [@admin])
+    assert res in [:ok, :accepted], "Cannot create `#{name}` database"
+    step
+  end
+
+  def teardown(setup, %__MODULE__{name: name} = step) do
+    :fabric.delete_db(name, [@admin])
+    :ok
+  end
+
+  def name(%__MODULE__{name: name}) do
+    name
+  end
+
+end
\ No newline at end of file
diff --git a/test/elixir/lib/step/start.ex b/test/elixir/lib/step/start.ex
new file mode 100644
index 0000000..ea7c70f
--- /dev/null
+++ b/test/elixir/lib/step/start.ex
@@ -0,0 +1,85 @@
+defmodule Couch.Test.Setup.Step.Start do
+  @moduledoc """
+  Step to start a set of couchdb applications. By default it starts
+  list of applications from DEFAULT_APPS macro defined in `test_util.erl`.
+  At the time of writing this list included:
+    - inets
+    - ibrowse
+    - ssl
+    - config
+    - couch_epi
+    - couch_event
+    - couch
+
+  It is possible to specify additional list of applications to start.
+
+  This setup is also maintains `clustered_url` and `backdoor_url` for future use.
+  The value for `clustered_url` could be nil if :chttpd app is not included in extra_apps.
+
+  Example
+    setup
+      |> Setup.Step.Start.new(:start, extra_apps: [:fabric, :chttpd])
+    ...
+      |> Setup.run
+    ...
+
+    started_apps = Setup.Step.Start.apps
+    clustered_url = setup |> Setup.get(:start) |> Setup.Step.Start.clustered_url
+    backdoor_url = setup |> Setup.get(:start) |> Setup.Step.Start.backdoor_url
+  """
+  alias Couch.Test.Setup
+  alias Couch.Test.Setup.Step
+
+  defstruct [:test_ctx, :extra_apps, :clustered_url, :backdoor_url]
+
+  def new(setup, id, extra_apps: extra_apps) do
+    setup |> Setup.step(id, %__MODULE__{extra_apps: extra_apps || []})
+  end
+
+  def setup(setup, %__MODULE__{extra_apps: extra_apps} = step) do
+    test_config = setup |> Setup.get(:test_config) |> Step.Config.get()
+    protocol = test_config[:backdoor][:protocol] || "http"
+    test_ctx = :test_util.start_couch(extra_apps)
+    addr = :config.get('couch_httpd', 'bind_address', '127.0.0.1')
+    port = :mochiweb_socket_server.get(:couch_httpd, :port)
+    backdoor_url = "#{protocol}://#{addr}:#{port}"
+    clustered_url =
+      if :chttpd in extra_apps do
+        protocol = test_config[:clustered][:protocol] || "http"
+        addr = :config.get('chttpd', 'bind_address', '127.0.0.1')
+        port = :mochiweb_socket_server.get(:chttpd, :port)
+        "#{protocol}://#{addr}:#{port}"
+      else
+        nil
+      end
+    %{step |
+      test_ctx: test_ctx,
+      clustered_url: clustered_url,
+      backdoor_url: backdoor_url
+    }
+  end
+
+  def teardown(_setup, %___MODULE__{test_ctx: test_ctx}) do
+    :test_util.stop_couch(test_ctx)
+  end
+
+  def backdoor_url(%__MODULE__{backdoor_url: url}) do
+    url
+  end
+
+  def clustered_url(%__MODULE__{clustered_url: url}) do
+    url
+  end
+
+  def extra_apps(%__MODULE__{extra_apps: apps}) do
+    apps
+  end
+
+  @doc """
+  Returns list of currently running applications
+  """
+  def apps() do
+    for {x, _, _} <- Application.started_applications, do: x
+  end
+
+end
\ No newline at end of file
diff --git a/test/elixir/lib/step/user.ex b/test/elixir/lib/step/user.ex
new file mode 100644
index 0000000..5a1cab3
--- /dev/null
+++ b/test/elixir/lib/step/user.ex
@@ -0,0 +1,104 @@
+defmodule Couch.Test.Setup.Step.User do
+  @moduledoc """
+  Step to create user with given list of roles.
+  The :server_admin is a special role which is used to put user
+  into `admins` section of a config instead of a database.
+
+  Example
+    setup
+      |> Setup.Step.User.new(:admin, roles: [:server_admin])
+    ...
+      |> Setup.run
+    ...
+
+    user = setup |> Setup.get(:admin) |> Step.User.name()
+  """
+
+  alias Couch.Test.Setup
+  alias Couch.Test.Setup.Step
+  alias Couch.Test.Utils
+
+  import ExUnit.Callbacks, only: [on_exit: 1]
+
+  defstruct [:roles, :name, :password, :users_db]
+
+  import ExUnit.Assertions, only: [assert: 1, assert: 2]
+
+  import Utils
+
+  @admin {:user_ctx, user_ctx(roles: ["_admin"])}
+
+  def new(setup, id, roles: roles) do
+    setup |> Setup.step(id, %__MODULE__{roles: roles || []})
+  end
+
+  def setup(setup, %__MODULE__{roles: roles} = step) do
+    users_db = IO.chardata_to_string(
+      :config.get('chttpd_auth', 'authentication_db', '_users'))
+    if not Utils.db_exists?(users_db) do
+      on_exit fn ->
+        :fabric.delete_db(users_db, [@admin])
+      end
+      res = :fabric.create_db(users_db, [@admin])
+      assert res in [:ok, :accepted], "Cannot create `users` database #{users_db}"
+    end
+
+    if :server_admin in roles do
+      name = Utils.random_name("admin")
+      pass = Utils.random_password()
+      :config.set(
+        'admins', String.to_charlist(name), String.to_charlist(pass), false)
+      %{step |
+        name: name,
+        password: pass,
+        users_db: users_db
+      }
+    else
+      name = Utils.random_name("admin")
+      pass = Utils.random_password()
+      doc_id = "org.couchdb.user:#{name}"
+      user_doc = :couch_doc.from_json_obj(%{
+        _id: doc_id,
+        name: name,
+        type: "user",
+        roles: roles,
+        password: pass
+      })
+      res = :fabric.update_doc(users_db, user_doc, [@admin])
+      assert res in [:ok, :accepted], "Cannot create user document"
+      %{step |
+        name: name,
+        password: pass,
+        users_db: users_db,
+        roles: roles
+      }
+    end
+  end
+
+  def teardown(setup, %__MODULE__{name: name, users_db: users_db, roles: roles} = step) do
+    if :server_admin in roles do
+      :config.delete("admins", String.to_charlist(name), false)
+    else
+      doc_id = "org.couchdb.user:#{name}"
+      assert {:ok, doc_info(revs: [rev | _])} = :fabric.get_doc_info(users_db)
+      doc = :couch_doc.from_json_obj(%{
+        _id: doc_id,
+        _rev: rev,
+        _deleted: true
+      })
+      assert {:ok, _resp} = :fabric.update_doc(users_db, doc, [@admin])
+    end
+    :ok
+  end
+
+  def name(%__MODULE__{name: name}) do
+    name
+  end
+  def password(%__MODULE__{password: pass}) do
+    pass
+  end
+  def credentials(%__MODULE__{name: name, password: pass}) do
+    {name, pass}
+  end
+
+end
\ No newline at end of file
diff --git a/test/elixir/lib/utils.ex b/test/elixir/lib/utils.ex
new file mode 100644
index 0000000..4d3f33f
--- /dev/null
+++ b/test/elixir/lib/utils.ex
@@ -0,0 +1,60 @@
+defmodule Couch.Test.Utils do
+  require Record
+  @moduledoc "Helper functions for testing"
+  Record.defrecord :user_ctx, Record.extract(
+    :user_ctx, from_lib: "couch/include/couch_db.hrl")
+
+  Record.defrecord :doc_info, Record.extract(
+    :doc_info, from_lib: "couch/include/couch_db.hrl")
+
+  def random_name(prefix) do
+    time = :erlang.monotonic_time()
+    umi = :erlang.unique_integer([:monotonic])
+    "#{prefix}-#{time}-#{umi}"
+  end
+
+  def random_password() do
+    rand_bytes = :crypto.strong_rand_bytes(16)
+    rand_bytes
+      |> :base64.encode()
+      |> String.slice(0..16)
+  end
+
+  def db_exists?(db_name) do
+    try do
+      :fabric.get_db_info(db_name)
+    catch
+      :error, :database_does_not_exist -> false
+    end
+  end
+
+  @doc """
+  In some cases we need to access record definition at compile time.
+  We cannot use Record.defrecord in such cases. This helper function
+  can be used instead. Use it as follows:
+  ```
+  defmodule Foo do
+    admin_ctx = {:user_ctx, Utils.erlang_record(
+      :user_ctx, "couch/include/couch_db.hrl", roles: ["_admin"])}
+  end
+  ```
+
+  Longer term we should wrap erlang records as it is done for user_ctx
+  see beginning of the Utils.ex. In this case we would be able to use
+  them at compile time in other modules.
+  ```
+  Record.defrecord :user_ctx, Record.extract(
+    :user_ctx, from_lib: "couch/include/couch_db.hrl")
+  ```
+  """
+  def erlang_record(name, from_lib, opts \\ []) do
+    record_info = Record.extract(name, from_lib: from_lib)
+    index = [name | Keyword.keys(record_info)] |> Enum.with_index
+    draft = [name | Keyword.values(record_info)] |> List.to_tuple
+    opts
+      |> Enum.reduce(draft, fn
+        {k, v}, acc -> put_elem(acc, index[k], v)
+      end)
+  end
+
+end
\ No newline at end of file


[couchdb] 06/06: Update .travis.yml

Posted by ii...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

iilyak pushed a commit to branch exunit-simplified
in repository https://gitbox.apache.org/repos/asf/couchdb.git

commit 02b0421724894ceab9bb16f43377cf7e51f1b4ae
Author: ILYA Khlopotov <ii...@apache.org>
AuthorDate: Fri Jun 21 12:50:56 2019 +0000

    Update .travis.yml
---
 .travis.yml | 5 -----
 1 file changed, 5 deletions(-)

diff --git a/.travis.yml b/.travis.yml
index 7ef4aea..4af915e 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -41,10 +41,6 @@ env:
     - secure: "UdA/gKIlyuXaW+hUgRx40t1TYjLCGxMqHvM5Uw7UbUH2dqEkgJiLfhZGchS1JVzl8M01VKZUUzS7v2nvRLiHZN1kvaw5kfq31VRoafUah8jfmvqNWZVdLovHl3aw5UX/HRt0RkbWbhdbdknTfh6+YinSZ+Nb54jCErMg9nabXtM="
     - COUCHDB_IO_LOG_DIR=/tmp/couchjslogs
 
-# Change to elixir folder so that travis can run mix deps.get during install
-before_install:
-  - cd test/elixir
-
 # Enable this block if you want to build docs & fauxton too
 #node_js:
 #  - 6
@@ -53,7 +49,6 @@ before_install:
 
 # Then comment this section out
 before_script:
-  - cd ../..
   - kerl list installations
   - rm -rf /tmp/couchjslogs
   - mkdir -p /tmp/couchjslogs


[couchdb] 05/06: Unify runners for unit and integration tests

Posted by ii...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

iilyak pushed a commit to branch exunit-simplified
in repository https://gitbox.apache.org/repos/asf/couchdb.git

commit 74a1007af64dff8eb9d5860a11a5a591cd1668c3
Author: ILYA Khlopotov <ii...@apache.org>
AuthorDate: Thu Jun 20 21:41:40 2019 +0000

    Unify runners for unit and integration tests
---
 .credo.exs                            |  3 ++-
 Makefile                              | 29 +++++++++++++--------------
 Makefile.win                          | 20 ++++++++-----------
 config/integration.exs                | 12 ++++++++++++
 mix.exs                               | 25 +++++++++++++++++------
 test/elixir/Makefile                  |  4 +++-
 test/elixir/lib/utils.ex              |  5 +++--
 test/elixir/mix.exs                   | 37 -----------------------------------
 test/elixir/mix.lock                  |  9 ---------
 test/elixir/run                       |  6 ------
 test/elixir/test/replication_test.exs |  4 ++--
 test/elixir/test/test_helper.exs      |  8 +++++---
 12 files changed, 68 insertions(+), 94 deletions(-)

diff --git a/.credo.exs b/.credo.exs
index db301e4..2b84a50 100644
--- a/.credo.exs
+++ b/.credo.exs
@@ -29,7 +29,8 @@
           ~r"/src/httpotion",
           ~r"/src/credo",
           ~r"/src/junit_formatter",
-          ~r"/src/bunt"
+          ~r"/src/bunt",
+          ~r"/test/elixir/deps/"
         ]
       },
       #
diff --git a/Makefile b/Makefile
index 3d1be51..58c8148 100644
--- a/Makefile
+++ b/Makefile
@@ -180,11 +180,7 @@ exunit: export MIX_ENV=test
 exunit: export ERL_LIBS = $(shell pwd)/src
 exunit: export ERL_AFLAGS = -config $(shell pwd)/rel/files/eunit.config
 exunit: export COUCHDB_QUERY_SERVER_JAVASCRIPT = $(shell pwd)/bin/couchjs $(shell pwd)/share/server/main.js
-exunit: couch elixir-check-formatted elixir-credo
-	@mix local.hex --force
-	@mix local.rebar rebar ${REBAR} --force
-	@mix deps.get
-	@$(REBAR) setup_eunit 2> /dev/null
+exunit: couch elixir-init setup-eunit elixir-check-formatted elixir-credo
 	@mix test --trace $(EXUNIT_OPTS)
 
 setup-eunit: export BUILDDIR = $(shell pwd)
@@ -226,34 +222,37 @@ python-black-update: .venv/bin/black
 		. dev/run rel/overlay/bin/couchup test/javascript/run
 
 .PHONY: elixir
+elixir: export MIX_ENV=integration
 elixir: elixir-init elixir-check-formatted elixir-credo devclean
-	@dev/run -a adm:pass --no-eval 'test/elixir/run --exclude without_quorum_test --exclude with_quorum_test $(EXUNIT_OPTS)'
+	@dev/run -a adm:pass --no-eval 'mix test --trace --exclude without_quorum_test --exclude with_quorum_test $(EXUNIT_OPTS)'
 
 .PHONY: elixir-init
 elixir-init:
-	@cd test/elixir && mix local.rebar --force && mix local.hex --force && mix deps.get
+	@mix local.rebar --force && mix local.hex --force && mix deps.get
 
 .PHONY: elixir-cluster-without-quorum
-elixir-cluster-without-quorum: elixir-check-formatted elixir-credo devclean
+elixir-cluster-without-quorum: export MIX_ENV=integration
+elixir-cluster-without-quorum: elixir-init elixir-check-formatted elixir-credo devclean
 	@dev/run -n 3 -q -a adm:pass \
 		--degrade-cluster 2 \
-		--no-eval 'test/elixir/run --only without_quorum_test $(EXUNIT_OPTS)'
+		--no-eval 'mix test --trace --only without_quorum_test $(EXUNIT_OPTS)'
 
 .PHONY: elixir-cluster-with-quorum
-elixir-cluster-with-quorum: elixir-check-formatted elixir-credo devclean
+elixir-cluster-with-quorum: export MIX_ENV=integration
+elixir-cluster-with-quorum: elixir-init elixir-check-formatted elixir-credo devclean
 	@dev/run -n 3 -q -a adm:pass \
 		--degrade-cluster 1 \
-		--no-eval 'test/elixir/run --only with_quorum_test $(EXUNIT_OPTS)'
+		--no-eval 'mix test --trace --only with_quorum_test $(EXUNIT_OPTS)'
 
 .PHONY: elixir-check-formatted
-elixir-check-formatted:
-	mix format --check-formatted
+elixir-check-formatted: elixir-init
+	@mix format --check-formatted
 
 # Credo is a static code analysis tool for Elixir.
 # We use it in our tests
 .PHONY: elixir-credo
-elixir-credo:
-	mix credo
+elixir-credo: elixir-init
+	@mix credo
 
 .PHONY: javascript
 # target: javascript - Run JavaScript test suites or specific ones defined by suites option
diff --git a/Makefile.win b/Makefile.win
index 2c4dc98..7a5b5fc 100644
--- a/Makefile.win
+++ b/Makefile.win
@@ -151,12 +151,8 @@ exunit: export MIX_ENV=test
 exunit: export ERL_LIBS = $(shell echo %cd%)\src
 exunit: export ERL_AFLAGS = -config $(shell echo %cd%)/rel/files/eunit.config
 exunit: export COUCHDB_QUERY_SERVER_JAVASCRIPT = $(shell echo %cd%)/bin/couchjs $(shell echo %cd%)/share/server/main.js
-exunit: couch elixir-check-formatted elixir-credo
-	@mix local.hex --force
-	@mix local.rebar rebar ${REBAR} --force
-	@mix deps.get
-	@$(REBAR) setup_eunit 2> nul
-	@mix test --trace $(EXUNIT_OPTS)
+exunit: couch elixir-init setup-eunit elixir-check-formatted elixir-credo
+	@mix test --trace --exclude integration $(EXUNIT_OPTS)
 
 setup-eunit: export BUILDDIR = $(shell pwd)
 setup-eunit: export ERL_AFLAGS = $(shell echo "-config rel/files/eunit.config")
@@ -191,33 +187,33 @@ python-black-update: .venv/bin/black
 
 .PHONY: elixir
 elixir: elixir-init elixir-check-formatted elixir-credo devclean
-	@dev\run -a adm:pass --no-eval 'test\elixir\run.cmd --exclude without_quorum_test --exclude with_quorum_test $(EXUNIT_OPTS)'
+	@dev\run -a adm:pass --no-eval 'mix test --trace --exclude without_quorum_test --exclude with_quorum_test $(EXUNIT_OPTS)'
 
 .PHONY: elixir-init
 elixir-init:
-	@cd test/elixir && mix local.rebar --force && mix local.hex --force && mix deps.get
+	@mix local.rebar --force && mix local.hex --force && mix deps.get
 
 .PHONY: elixir-cluster-without-quorum
 elixir-cluster-without-quorum: elixir-check-formatted elixir-credo devclean
 	@dev\run -n 3 -q -a adm:pass \
 	         --degrade-cluster 2 \
-                 --no-eval 'test\elixir\run.cmd --only without_quorum_test $(EXUNIT_OPTS)'
+                 --no-eval 'mix test --trace --only without_quorum_test $(EXUNIT_OPTS)'
 
 .PHONY: elixir-cluster-with-quorum
 elixir-cluster-with-quorum: elixir-check-formatted elixir-credo devclean
 	@dev\run -n 3 -q -a adm:pass \
 	         --degrade-cluster 1 \
-		 --no-eval 'test\elixir\run.cmd --only with_quorum_test $(EXUNIT_OPTS)'
+		 --no-eval 'mix test --trace --only with_quorum_test $(EXUNIT_OPTS)'
 
 .PHONY: elixir-check-formatted
 elixir-check-formatted:
-	@cd test\elixir && mix format --check-formatted
+	@mix format --check-formatted
 
 # Credo is a static code analysis tool for Elixir.
 # We use it in our tests
 .PHONY: elixir-credo
 elixir-credo:
-	@cd test/elixir/ && mix credo
+	@mix credo
 
 .PHONY: test-cluster-with-quorum
 test-cluster-with-quorum: devclean
diff --git a/config/integration.exs b/config/integration.exs
new file mode 100644
index 0000000..c5a5ed2
--- /dev/null
+++ b/config/integration.exs
@@ -0,0 +1,12 @@
+use Mix.Config
+
+config :logger,
+  backends: [:console],
+  compile_time_purge_level: :debug,
+  level: :debug
+
+config :kernel,
+  error_logger: false
+
+config :sasl,
+  sasl_error_logger: false
diff --git a/mix.exs b/mix.exs
index d9c8c21..2e213ae 100644
--- a/mix.exs
+++ b/mix.exs
@@ -13,8 +13,8 @@ defmodule CouchDBTest.Mixfile do
       start_permanent: Mix.env() == :prod,
       build_embedded: Mix.env() == :prod,
       deps: deps(),
-      consolidate_protocols: Mix.env() not in [:test, :dev],
-      test_paths: get_test_paths(),
+      consolidate_protocols: Mix.env() not in [:test, :dev, :integration],
+      test_paths: get_test_paths(Mix.env()),
       elixirc_paths: elixirc_paths(Mix.env())
     ]
   end
@@ -22,26 +22,39 @@ defmodule CouchDBTest.Mixfile do
   # Run "mix help compile.app" to learn about applications.
   def application do
     [
-      extra_applications: [:logger]
+      extra_applications: [:logger],
+      applications: [:httpotion]
     ]
   end
 
   # Specifies which paths to compile per environment.
   defp elixirc_paths(:test), do: ["test/elixir/lib", "test/elixir/test/support"]
+  defp elixirc_paths(:integration), do: ["test/elixir/lib", "test/elixir/test/support"]
   defp elixirc_paths(_), do: ["test/elixir/lib"]
 
   # Run "mix help deps" to learn about dependencies.
   defp deps() do
     [
-      {:httpotion, "~> 3.0", only: [:dev, :test], runtime: false},
+      {:httpotion, "~> 3.0", only: [:dev, :test, :integration], runtime: false},
       {:jiffy, path: Path.expand("src/jiffy", __DIR__)},
       {:ibrowse,
        path: Path.expand("src/ibrowse", __DIR__), override: true, compile: false},
-      {:credo, "~> 1.0.0", only: [:dev, :test], runtime: false}
+      {:credo, "~> 1.0.0", only: [:dev, :test, :integration], runtime: false}
     ]
   end
 
-  def get_test_paths do
+  def get_test_paths(:test) do
     Path.wildcard("src/*/test/exunit") |> Enum.filter(&File.dir?/1)
   end
+
+  def get_test_paths(:integration) do
+    integration_tests =
+      Path.wildcard("src/*/test/integration") |> Enum.filter(&File.dir?/1)
+
+    ["test/elixir/test" | integration_tests]
+  end
+
+  def get_test_paths(_) do
+    []
+  end
 end
diff --git a/test/elixir/Makefile b/test/elixir/Makefile
index bfcf017..67ce2b4 100644
--- a/test/elixir/Makefile
+++ b/test/elixir/Makefile
@@ -1,2 +1,4 @@
+SELF_DIR := $(dir $(lastword $(MAKEFILE_LIST)))
+
 all:
-	mix test --trace
+	make -C ${SELF_DIR}../.. elixir
diff --git a/test/elixir/lib/utils.ex b/test/elixir/lib/utils.ex
index 4d3f33f..3ecf878 100644
--- a/test/elixir/lib/utils.ex
+++ b/test/elixir/lib/utils.ex
@@ -1,11 +1,12 @@
 defmodule Couch.Test.Utils do
   require Record
   @moduledoc "Helper functions for testing"
+  @project_root "#{__DIR__}/../../../"
   Record.defrecord :user_ctx, Record.extract(
-    :user_ctx, from_lib: "couch/include/couch_db.hrl")
+    :user_ctx, from: "#{@project_root}/src/couch/include/couch_db.hrl")
 
   Record.defrecord :doc_info, Record.extract(
-    :doc_info, from_lib: "couch/include/couch_db.hrl")
+    :doc_info, from: "#{@project_root}/src/couch/include/couch_db.hrl")
 
   def random_name(prefix) do
     time = :erlang.monotonic_time()
diff --git a/test/elixir/mix.exs b/test/elixir/mix.exs
deleted file mode 100644
index f04038e..0000000
--- a/test/elixir/mix.exs
+++ /dev/null
@@ -1,37 +0,0 @@
-defmodule Foo.Mixfile do
-  use Mix.Project
-
-  def project do
-    [
-      app: :foo,
-      version: "0.1.0",
-      elixir: "~> 1.6",
-      elixirc_paths: elixirc_paths(Mix.env()),
-      start_permanent: Mix.env() == :prod,
-      deps: deps()
-    ]
-  end
-
-  # Run "mix help compile.app" to learn about applications.
-  def application do
-    [
-      extra_applications: [:logger]
-    ]
-  end
-
-  # Specifies which paths to compile per environment.
-  defp elixirc_paths(:test), do: ["lib", "test/support"]
-  defp elixirc_paths(_), do: ["lib"]
-
-  # Run "mix help deps" to learn about dependencies.
-  defp deps do
-    [
-      # {:dep_from_hexpm, "~> 0.3.0"},
-      {:httpotion, "~> 3.0"},
-      {:jiffy, "~> 0.15.2"},
-      {:credo, "~> 1.0.0", only: [:dev, :test], runtime: false},
-      {:junit_formatter, "~> 3.0", only: [:test]}
-      # {:dep_from_git, git: "https://github.com/elixir-lang/my_dep.git", tag: "0.1.0"},
-    ]
-  end
-end
diff --git a/test/elixir/mix.lock b/test/elixir/mix.lock
deleted file mode 100644
index 0fc391a..0000000
--- a/test/elixir/mix.lock
+++ /dev/null
@@ -1,9 +0,0 @@
-%{
-  "bunt": {:hex, :bunt, "0.2.0", "951c6e801e8b1d2cbe58ebbd3e616a869061ddadcc4863d0a2182541acae9a38", [:mix], [], "hexpm"},
-  "credo": {:hex, :credo, "1.0.0", "aaa40fdd0543a0cf8080e8c5949d8c25f0a24e4fc8c1d83d06c388f5e5e0ea42", [:mix], [{:bunt, "~> 0.2.0", [hex: :bunt, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm"},
-  "httpotion": {:hex, :httpotion, "3.1.0", "14d20d9b0ce4e86e253eb91e4af79e469ad949f57a5d23c0a51b2f86559f6589", [:mix], [{:ibrowse, "~> 4.4", [hex: :ibrowse, repo: "hexpm", optional: false]}], "hexpm"},
-  "ibrowse": {:hex, :ibrowse, "4.4.1", "2b7d0637b0f8b9b4182de4bd0f2e826a4da2c9b04898b6e15659ba921a8d6ec2", [:rebar3], [], "hexpm"},
-  "jason": {:hex, :jason, "1.1.2", "b03dedea67a99223a2eaf9f1264ce37154564de899fd3d8b9a21b1a6fd64afe7", [:mix], [{:decimal, "~> 1.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm"},
-  "jiffy": {:hex, :jiffy, "0.15.2", "de266c390111fd4ea28b9302f0bc3d7472468f3b8e0aceabfbefa26d08cd73b7", [:rebar3], [], "hexpm"},
-  "junit_formatter": {:hex, :junit_formatter, "3.0.0", "13950d944dbd295da7d8cc4798b8faee808a8bb9b637c88069954eac078ac9da", [:mix], [], "hexpm"},
-}
diff --git a/test/elixir/run b/test/elixir/run
deleted file mode 100755
index a9c2efa..0000000
--- a/test/elixir/run
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/bin/bash -e
-cd "$(dirname "$0")"
-mix local.hex --force
-mix local.rebar --force
-mix deps.get
-mix test --trace "$@"
diff --git a/test/elixir/test/replication_test.exs b/test/elixir/test/replication_test.exs
index e98775f..a6e1303 100644
--- a/test/elixir/test/replication_test.exs
+++ b/test/elixir/test/replication_test.exs
@@ -1757,11 +1757,11 @@ defmodule ReplicationTest do
   end
 
   def get_att1_data do
-    File.read!("test/data/lorem.txt")
+    File.read!(Path.expand("data/lorem.txt", __DIR__))
   end
 
   def get_att2_data do
-    File.read!("test/data/lorem_b64.txt")
+    File.read!(Path.expand("data/lorem_b64.txt", __DIR__))
   end
 
   def cmp_json(lhs, rhs) when is_map(lhs) and is_map(rhs) do
diff --git a/test/elixir/test/test_helper.exs b/test/elixir/test/test_helper.exs
index ef71bbb..4bf65bc 100644
--- a/test/elixir/test/test_helper.exs
+++ b/test/elixir/test/test_helper.exs
@@ -2,12 +2,14 @@
 # and skip certain tests that fail on jenkins.
 exclude =
   case System.get_env("BUILD_NUMBER") !== nil do
-    true -> [pending: true, skip_on_jenkins: true]
-    false -> [pending: true]
+    true -> [:pending, :skip_on_jenkins]
+    false -> [:pending]
   end
 
+current_exclude = Keyword.get(ExUnit.configuration(), :exclude, [])
+
 ExUnit.configure(
-  exclude: exclude,
+  exclude: Enum.uniq(exclude ++ current_exclude),
   formatters: [JUnitFormatter, ExUnit.CLIFormatter]
 )
 


[couchdb] 03/06: Move eunit tests into test/eunit directory

Posted by ii...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

iilyak pushed a commit to branch exunit-simplified
in repository https://gitbox.apache.org/repos/asf/couchdb.git

commit cf60cffb44bf18889aa8362b616bafb7bed87445
Author: ILYA Khlopotov <ii...@apache.org>
AuthorDate: Fri May 10 00:45:21 2019 +0000

    Move eunit tests into test/eunit directory
---
 src/chttpd/test/{ => eunit}/chttpd_cors_test.erl            |   0
 src/chttpd/test/{ => eunit}/chttpd_csp_tests.erl            |   0
 .../test/{ => eunit}/chttpd_db_attachment_size_tests.erl    |   0
 .../test/{ => eunit}/chttpd_db_bulk_get_multipart_test.erl  |   0
 src/chttpd/test/{ => eunit}/chttpd_db_bulk_get_test.erl     |   0
 src/chttpd/test/{ => eunit}/chttpd_db_doc_size_tests.erl    |   0
 src/chttpd/test/{ => eunit}/chttpd_db_test.erl              |   0
 src/chttpd/test/{ => eunit}/chttpd_dbs_info_test.erl        |   0
 src/chttpd/test/{ => eunit}/chttpd_error_info_tests.erl     |   0
 src/chttpd/test/{ => eunit}/chttpd_handlers_tests.erl       |   0
 src/chttpd/test/{ => eunit}/chttpd_open_revs_error_test.erl |   0
 src/chttpd/test/{ => eunit}/chttpd_plugin_tests.erl         |   0
 src/chttpd/test/{ => eunit}/chttpd_prefer_header_test.erl   |   0
 src/chttpd/test/{ => eunit}/chttpd_purge_tests.erl          |   0
 src/chttpd/test/{ => eunit}/chttpd_security_tests.erl       |   0
 .../test/{ => eunit}/chttpd_socket_buffer_size_test.erl     |   0
 src/chttpd/test/{ => eunit}/chttpd_view_test.erl            |   0
 src/chttpd/test/{ => eunit}/chttpd_welcome_test.erl         |   0
 src/chttpd/test/{ => eunit}/chttpd_xframe_test.erl          |   0
 src/couch/include/couch_eunit.hrl                           |   2 +-
 src/couch/test/{ => eunit}/chttpd_endpoints_tests.erl       |   0
 src/couch/test/{ => eunit}/couch_auth_cache_tests.erl       |   0
 src/couch/test/{ => eunit}/couch_base32_tests.erl           |   0
 .../test/{ => eunit}/couch_bt_engine_compactor_tests.erl    |   0
 src/couch/test/{ => eunit}/couch_bt_engine_tests.erl        |   0
 .../test/{ => eunit}/couch_bt_engine_upgrade_tests.erl      |   0
 src/couch/test/{ => eunit}/couch_btree_tests.erl            |   0
 src/couch/test/{ => eunit}/couch_changes_tests.erl          |   0
 src/couch/test/{ => eunit}/couch_compress_tests.erl         |   0
 src/couch/test/{ => eunit}/couch_db_doc_tests.erl           |   0
 src/couch/test/{ => eunit}/couch_db_mpr_tests.erl           |   0
 src/couch/test/{ => eunit}/couch_db_plugin_tests.erl        |   0
 src/couch/test/{ => eunit}/couch_db_props_upgrade_tests.erl |   0
 src/couch/test/{ => eunit}/couch_db_split_tests.erl         |   0
 src/couch/test/{ => eunit}/couch_db_tests.erl               |   0
 src/couch/test/{ => eunit}/couch_doc_json_tests.erl         |   0
 src/couch/test/{ => eunit}/couch_doc_tests.erl              |   0
 src/couch/test/{ => eunit}/couch_ejson_size_tests.erl       |   0
 src/couch/test/{ => eunit}/couch_etag_tests.erl             |   0
 src/couch/test/{ => eunit}/couch_file_tests.erl             |   0
 src/couch/test/{ => eunit}/couch_flags_config_tests.erl     |   0
 src/couch/test/{ => eunit}/couch_flags_tests.erl            |   0
 src/couch/test/{ => eunit}/couch_hotp_tests.erl             |   0
 src/couch/test/{ => eunit}/couch_index_tests.erl            |   0
 src/couch/test/{ => eunit}/couch_key_tree_prop_tests.erl    |   0
 src/couch/test/{ => eunit}/couch_key_tree_tests.erl         |   0
 src/couch/test/{ => eunit}/couch_passwords_tests.erl        |   0
 src/couch/test/{ => eunit}/couch_query_servers_tests.erl    |   0
 src/couch/test/{ => eunit}/couch_server_tests.erl           |   0
 src/couch/test/{ => eunit}/couch_stream_tests.erl           |   0
 src/couch/test/{ => eunit}/couch_task_status_tests.erl      |   0
 src/couch/test/{ => eunit}/couch_totp_tests.erl             |   0
 src/couch/test/{ => eunit}/couch_util_tests.erl             |   0
 src/couch/test/{ => eunit}/couch_uuids_tests.erl            |   0
 src/couch/test/{ => eunit}/couch_work_queue_tests.erl       |   0
 src/couch/test/{ => eunit}/couchdb_attachments_tests.erl    |   0
 src/couch/test/{ => eunit}/couchdb_auth_tests.erl           |   0
 src/couch/test/{ => eunit}/couchdb_cookie_domain_tests.erl  |   0
 src/couch/test/{ => eunit}/couchdb_cors_tests.erl           |   0
 src/couch/test/{ => eunit}/couchdb_db_tests.erl             |   0
 src/couch/test/{ => eunit}/couchdb_design_doc_tests.erl     |   0
 .../test/{ => eunit}/couchdb_file_compression_tests.erl     |   0
 .../test/{ => eunit}/couchdb_location_header_tests.erl      |   0
 src/couch/test/{ => eunit}/couchdb_mrview_cors_tests.erl    |   0
 src/couch/test/{ => eunit}/couchdb_mrview_tests.erl         |   0
 src/couch/test/{ => eunit}/couchdb_os_proc_pool.erl         |   0
 .../test/{ => eunit}/couchdb_update_conflicts_tests.erl     |   0
 src/couch/test/{ => eunit}/couchdb_vhosts_tests.erl         |   0
 src/couch/test/{ => eunit}/couchdb_views_tests.erl          |   0
 .../fixtures/3b835456c235b1827e012e25666152f3.view          | Bin
 .../test/{ => eunit}/fixtures/couch_stats_aggregates.cfg    |   0
 .../test/{ => eunit}/fixtures/couch_stats_aggregates.ini    |   0
 .../test/{ => eunit}/fixtures/db_non_partitioned.couch      | Bin
 .../test/{ => eunit}/fixtures/db_v6_with_1_purge_req.couch  | Bin
 .../fixtures/db_v6_with_1_purge_req_for_2_docs.couch        | Bin
 .../test/{ => eunit}/fixtures/db_v6_with_2_purge_req.couch  | Bin
 .../test/{ => eunit}/fixtures/db_v6_without_purge_req.couch | Bin
 .../test/{ => eunit}/fixtures/db_v7_with_1_purge_req.couch  | Bin
 .../fixtures/db_v7_with_1_purge_req_for_2_docs.couch        | Bin
 .../test/{ => eunit}/fixtures/db_v7_with_2_purge_req.couch  | Bin
 .../test/{ => eunit}/fixtures/db_v7_without_purge_req.couch | Bin
 src/couch/test/{ => eunit}/fixtures/logo.png                | Bin
 src/couch/test/{ => eunit}/fixtures/multipart.http          |   0
 src/couch/test/{ => eunit}/fixtures/os_daemon_bad_perm.sh   |   0
 src/couch/test/{ => eunit}/fixtures/os_daemon_can_reboot.sh |   0
 .../test/{ => eunit}/fixtures/os_daemon_configer.escript    |   0
 .../test/{ => eunit}/fixtures/os_daemon_die_on_boot.sh      |   0
 .../test/{ => eunit}/fixtures/os_daemon_die_quickly.sh      |   0
 .../test/{ => eunit}/fixtures/os_daemon_looper.escript      |   0
 src/couch/test/{ => eunit}/fixtures/test.couch              | Bin
 src/couch/test/{ => eunit}/global_changes_tests.erl         |   0
 src/couch/test/{ => eunit}/json_stream_parse_tests.erl      |   0
 src/couch/test/{ => eunit}/test_web.erl                     |   0
 src/couch_epi/test/{ => eunit}/couch_epi_basic_test.erl     |   0
 src/couch_epi/test/{ => eunit}/couch_epi_tests.erl          |   4 ++--
 src/couch_epi/test/{ => eunit}/fixtures/app_data1.cfg       |   0
 src/couch_epi/test/{ => eunit}/fixtures/app_data2.cfg       |   0
 .../test/{ => eunit}/couch_index_compaction_tests.erl       |   0
 .../test/{ => eunit}/couch_index_ddoc_updated_tests.erl     |   0
 .../test/{ => eunit}/couch_log_config_listener_test.erl     |   0
 src/couch_log/test/{ => eunit}/couch_log_config_test.erl    |   0
 .../test/{ => eunit}/couch_log_error_logger_h_test.erl      |   0
 src/couch_log/test/{ => eunit}/couch_log_formatter_test.erl |   0
 src/couch_log/test/{ => eunit}/couch_log_monitor_test.erl   |   0
 src/couch_log/test/{ => eunit}/couch_log_server_test.erl    |   0
 src/couch_log/test/{ => eunit}/couch_log_test.erl           |   0
 src/couch_log/test/{ => eunit}/couch_log_test_util.erl      |   0
 .../test/{ => eunit}/couch_log_trunc_io_fmt_test.erl        |   0
 src/couch_log/test/{ => eunit}/couch_log_util_test.erl      |   0
 src/couch_log/test/{ => eunit}/couch_log_writer_ets.erl     |   0
 .../test/{ => eunit}/couch_log_writer_file_test.erl         |   0
 .../test/{ => eunit}/couch_log_writer_stderr_test.erl       |   0
 .../test/{ => eunit}/couch_log_writer_syslog_test.erl       |   0
 src/couch_log/test/{ => eunit}/couch_log_writer_test.erl    |   0
 .../test/{ => eunit}/couch_mrview_all_docs_tests.erl        |   0
 .../test/{ => eunit}/couch_mrview_changes_since_tests.erl   |   0
 .../test/{ => eunit}/couch_mrview_collation_tests.erl       |   0
 .../test/{ => eunit}/couch_mrview_compact_tests.erl         |   0
 .../test/{ => eunit}/couch_mrview_ddoc_updated_tests.erl    |   0
 .../test/{ => eunit}/couch_mrview_ddoc_validation_tests.erl |   0
 .../test/{ => eunit}/couch_mrview_design_docs_tests.erl     |   0
 .../test/{ => eunit}/couch_mrview_http_tests.erl            |   0
 .../test/{ => eunit}/couch_mrview_index_changes_tests.erl   |   0
 .../test/{ => eunit}/couch_mrview_index_info_tests.erl      |   0
 .../test/{ => eunit}/couch_mrview_local_docs_tests.erl      |   0
 .../test/{ => eunit}/couch_mrview_map_views_tests.erl       |   0
 .../{ => eunit}/couch_mrview_purge_docs_fabric_tests.erl    |   0
 .../test/{ => eunit}/couch_mrview_purge_docs_tests.erl      |   0
 .../test/{ => eunit}/couch_mrview_red_views_tests.erl       |   0
 .../test/{ => eunit}/couch_mrview_util_tests.erl            |   0
 src/couch_peruser/test/{ => eunit}/couch_peruser_test.erl   |   0
 .../{ => eunit}/couch_replicator_attachments_too_large.erl  |   0
 .../test/{ => eunit}/couch_replicator_compact_tests.erl     |   0
 .../test/{ => eunit}/couch_replicator_connection_tests.erl  |   0
 .../couch_replicator_create_target_with_options_tests.erl   |   0
 .../test/{ => eunit}/couch_replicator_filtered_tests.erl    |   0
 .../test/{ => eunit}/couch_replicator_httpc_pool_tests.erl  |   0
 .../test/{ => eunit}/couch_replicator_id_too_long_tests.erl |   0
 .../test/{ => eunit}/couch_replicator_large_atts_tests.erl  |   0
 .../test/{ => eunit}/couch_replicator_many_leaves_tests.erl |   0
 .../{ => eunit}/couch_replicator_missing_stubs_tests.erl    |   0
 .../test/{ => eunit}/couch_replicator_proxy_tests.erl       |   0
 .../{ => eunit}/couch_replicator_rate_limiter_tests.erl     |   0
 .../couch_replicator_retain_stats_between_job_runs.erl      |   0
 .../test/{ => eunit}/couch_replicator_selector_tests.erl    |   0
 .../couch_replicator_small_max_request_size_target.erl      |   0
 .../test/{ => eunit}/couch_replicator_test_helper.erl       |   0
 .../{ => eunit}/couch_replicator_use_checkpoints_tests.erl  |   0
 src/ddoc_cache/test/{ => eunit}/ddoc_cache_basic_test.erl   |   0
 .../test/{ => eunit}/ddoc_cache_coverage_test.erl           |   0
 .../test/{ => eunit}/ddoc_cache_disabled_test.erl           |   0
 src/ddoc_cache/test/{ => eunit}/ddoc_cache_entry_test.erl   |   0
 src/ddoc_cache/test/{ => eunit}/ddoc_cache_ev.erl           |   0
 .../test/{ => eunit}/ddoc_cache_eviction_test.erl           |   0
 src/ddoc_cache/test/{ => eunit}/ddoc_cache_lru_test.erl     |   0
 .../test/{ => eunit}/ddoc_cache_no_cache_test.erl           |   0
 .../test/{ => eunit}/ddoc_cache_open_error_test.erl         |   0
 src/ddoc_cache/test/{ => eunit}/ddoc_cache_open_test.erl    |   0
 src/ddoc_cache/test/{ => eunit}/ddoc_cache_opener_test.erl  |   0
 src/ddoc_cache/test/{ => eunit}/ddoc_cache_refresh_test.erl |   0
 src/ddoc_cache/test/{ => eunit}/ddoc_cache_remove_test.erl  |   0
 src/ddoc_cache/test/{ => eunit}/ddoc_cache_test.hrl         |   0
 src/ddoc_cache/test/{ => eunit}/ddoc_cache_tutil.erl        |   0
 src/fabric/test/{ => eunit}/fabric_rpc_purge_tests.erl      |   0
 .../test/{ => eunit}/global_changes_hooks_tests.erl         |   0
 src/mem3/test/{ => eunit}/mem3_cluster_test.erl             |   0
 src/mem3/test/{ => eunit}/mem3_hash_test.erl                |   0
 src/mem3/test/{ => eunit}/mem3_rep_test.erl                 |   0
 src/mem3/test/{ => eunit}/mem3_reshard_api_test.erl         |   0
 .../test/{ => eunit}/mem3_reshard_changes_feed_test.erl     |   0
 src/mem3/test/{ => eunit}/mem3_reshard_test.erl             |   0
 src/mem3/test/{ => eunit}/mem3_ring_prop_tests.erl          |   0
 src/mem3/test/{ => eunit}/mem3_seeds_test.erl               |   0
 src/mem3/test/{ => eunit}/mem3_sync_security_test.erl       |   0
 src/mem3/test/{ => eunit}/mem3_util_test.erl                |   0
 175 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/chttpd/test/chttpd_cors_test.erl b/src/chttpd/test/eunit/chttpd_cors_test.erl
similarity index 100%
rename from src/chttpd/test/chttpd_cors_test.erl
rename to src/chttpd/test/eunit/chttpd_cors_test.erl
diff --git a/src/chttpd/test/chttpd_csp_tests.erl b/src/chttpd/test/eunit/chttpd_csp_tests.erl
similarity index 100%
rename from src/chttpd/test/chttpd_csp_tests.erl
rename to src/chttpd/test/eunit/chttpd_csp_tests.erl
diff --git a/src/chttpd/test/chttpd_db_attachment_size_tests.erl b/src/chttpd/test/eunit/chttpd_db_attachment_size_tests.erl
similarity index 100%
rename from src/chttpd/test/chttpd_db_attachment_size_tests.erl
rename to src/chttpd/test/eunit/chttpd_db_attachment_size_tests.erl
diff --git a/src/chttpd/test/chttpd_db_bulk_get_multipart_test.erl b/src/chttpd/test/eunit/chttpd_db_bulk_get_multipart_test.erl
similarity index 100%
rename from src/chttpd/test/chttpd_db_bulk_get_multipart_test.erl
rename to src/chttpd/test/eunit/chttpd_db_bulk_get_multipart_test.erl
diff --git a/src/chttpd/test/chttpd_db_bulk_get_test.erl b/src/chttpd/test/eunit/chttpd_db_bulk_get_test.erl
similarity index 100%
rename from src/chttpd/test/chttpd_db_bulk_get_test.erl
rename to src/chttpd/test/eunit/chttpd_db_bulk_get_test.erl
diff --git a/src/chttpd/test/chttpd_db_doc_size_tests.erl b/src/chttpd/test/eunit/chttpd_db_doc_size_tests.erl
similarity index 100%
rename from src/chttpd/test/chttpd_db_doc_size_tests.erl
rename to src/chttpd/test/eunit/chttpd_db_doc_size_tests.erl
diff --git a/src/chttpd/test/chttpd_db_test.erl b/src/chttpd/test/eunit/chttpd_db_test.erl
similarity index 100%
rename from src/chttpd/test/chttpd_db_test.erl
rename to src/chttpd/test/eunit/chttpd_db_test.erl
diff --git a/src/chttpd/test/chttpd_dbs_info_test.erl b/src/chttpd/test/eunit/chttpd_dbs_info_test.erl
similarity index 100%
rename from src/chttpd/test/chttpd_dbs_info_test.erl
rename to src/chttpd/test/eunit/chttpd_dbs_info_test.erl
diff --git a/src/chttpd/test/chttpd_error_info_tests.erl b/src/chttpd/test/eunit/chttpd_error_info_tests.erl
similarity index 100%
rename from src/chttpd/test/chttpd_error_info_tests.erl
rename to src/chttpd/test/eunit/chttpd_error_info_tests.erl
diff --git a/src/chttpd/test/chttpd_handlers_tests.erl b/src/chttpd/test/eunit/chttpd_handlers_tests.erl
similarity index 100%
rename from src/chttpd/test/chttpd_handlers_tests.erl
rename to src/chttpd/test/eunit/chttpd_handlers_tests.erl
diff --git a/src/chttpd/test/chttpd_open_revs_error_test.erl b/src/chttpd/test/eunit/chttpd_open_revs_error_test.erl
similarity index 100%
rename from src/chttpd/test/chttpd_open_revs_error_test.erl
rename to src/chttpd/test/eunit/chttpd_open_revs_error_test.erl
diff --git a/src/chttpd/test/chttpd_plugin_tests.erl b/src/chttpd/test/eunit/chttpd_plugin_tests.erl
similarity index 100%
rename from src/chttpd/test/chttpd_plugin_tests.erl
rename to src/chttpd/test/eunit/chttpd_plugin_tests.erl
diff --git a/src/chttpd/test/chttpd_prefer_header_test.erl b/src/chttpd/test/eunit/chttpd_prefer_header_test.erl
similarity index 100%
rename from src/chttpd/test/chttpd_prefer_header_test.erl
rename to src/chttpd/test/eunit/chttpd_prefer_header_test.erl
diff --git a/src/chttpd/test/chttpd_purge_tests.erl b/src/chttpd/test/eunit/chttpd_purge_tests.erl
similarity index 100%
rename from src/chttpd/test/chttpd_purge_tests.erl
rename to src/chttpd/test/eunit/chttpd_purge_tests.erl
diff --git a/src/chttpd/test/chttpd_security_tests.erl b/src/chttpd/test/eunit/chttpd_security_tests.erl
similarity index 100%
rename from src/chttpd/test/chttpd_security_tests.erl
rename to src/chttpd/test/eunit/chttpd_security_tests.erl
diff --git a/src/chttpd/test/chttpd_socket_buffer_size_test.erl b/src/chttpd/test/eunit/chttpd_socket_buffer_size_test.erl
similarity index 100%
rename from src/chttpd/test/chttpd_socket_buffer_size_test.erl
rename to src/chttpd/test/eunit/chttpd_socket_buffer_size_test.erl
diff --git a/src/chttpd/test/chttpd_view_test.erl b/src/chttpd/test/eunit/chttpd_view_test.erl
similarity index 100%
rename from src/chttpd/test/chttpd_view_test.erl
rename to src/chttpd/test/eunit/chttpd_view_test.erl
diff --git a/src/chttpd/test/chttpd_welcome_test.erl b/src/chttpd/test/eunit/chttpd_welcome_test.erl
similarity index 100%
rename from src/chttpd/test/chttpd_welcome_test.erl
rename to src/chttpd/test/eunit/chttpd_welcome_test.erl
diff --git a/src/chttpd/test/chttpd_xframe_test.erl b/src/chttpd/test/eunit/chttpd_xframe_test.erl
similarity index 100%
rename from src/chttpd/test/chttpd_xframe_test.erl
rename to src/chttpd/test/eunit/chttpd_xframe_test.erl
diff --git a/src/couch/include/couch_eunit.hrl b/src/couch/include/couch_eunit.hrl
index f4617e1..d3611c8 100644
--- a/src/couch/include/couch_eunit.hrl
+++ b/src/couch/include/couch_eunit.hrl
@@ -28,7 +28,7 @@
     filename:join([?BUILDDIR(), "tmp", "etc", "local_eunit.ini"]),
     filename:join([?BUILDDIR(), "tmp", "etc", "eunit.ini"])]).
 -define(FIXTURESDIR,
-    filename:join([?BUILDDIR(), "src", "couch", "test", "fixtures"])).
+    filename:join([?BUILDDIR(), "src", "couch", "test", "eunit", "fixtures"])).
 -define(TEMPDIR,
     filename:join([?BUILDDIR(), "tmp", "tmp_data"])).
 
diff --git a/src/couch/test/chttpd_endpoints_tests.erl b/src/couch/test/eunit/chttpd_endpoints_tests.erl
similarity index 100%
rename from src/couch/test/chttpd_endpoints_tests.erl
rename to src/couch/test/eunit/chttpd_endpoints_tests.erl
diff --git a/src/couch/test/couch_auth_cache_tests.erl b/src/couch/test/eunit/couch_auth_cache_tests.erl
similarity index 100%
rename from src/couch/test/couch_auth_cache_tests.erl
rename to src/couch/test/eunit/couch_auth_cache_tests.erl
diff --git a/src/couch/test/couch_base32_tests.erl b/src/couch/test/eunit/couch_base32_tests.erl
similarity index 100%
rename from src/couch/test/couch_base32_tests.erl
rename to src/couch/test/eunit/couch_base32_tests.erl
diff --git a/src/couch/test/couch_bt_engine_compactor_tests.erl b/src/couch/test/eunit/couch_bt_engine_compactor_tests.erl
similarity index 100%
rename from src/couch/test/couch_bt_engine_compactor_tests.erl
rename to src/couch/test/eunit/couch_bt_engine_compactor_tests.erl
diff --git a/src/couch/test/couch_bt_engine_tests.erl b/src/couch/test/eunit/couch_bt_engine_tests.erl
similarity index 100%
rename from src/couch/test/couch_bt_engine_tests.erl
rename to src/couch/test/eunit/couch_bt_engine_tests.erl
diff --git a/src/couch/test/couch_bt_engine_upgrade_tests.erl b/src/couch/test/eunit/couch_bt_engine_upgrade_tests.erl
similarity index 100%
rename from src/couch/test/couch_bt_engine_upgrade_tests.erl
rename to src/couch/test/eunit/couch_bt_engine_upgrade_tests.erl
diff --git a/src/couch/test/couch_btree_tests.erl b/src/couch/test/eunit/couch_btree_tests.erl
similarity index 100%
rename from src/couch/test/couch_btree_tests.erl
rename to src/couch/test/eunit/couch_btree_tests.erl
diff --git a/src/couch/test/couch_changes_tests.erl b/src/couch/test/eunit/couch_changes_tests.erl
similarity index 100%
rename from src/couch/test/couch_changes_tests.erl
rename to src/couch/test/eunit/couch_changes_tests.erl
diff --git a/src/couch/test/couch_compress_tests.erl b/src/couch/test/eunit/couch_compress_tests.erl
similarity index 100%
rename from src/couch/test/couch_compress_tests.erl
rename to src/couch/test/eunit/couch_compress_tests.erl
diff --git a/src/couch/test/couch_db_doc_tests.erl b/src/couch/test/eunit/couch_db_doc_tests.erl
similarity index 100%
rename from src/couch/test/couch_db_doc_tests.erl
rename to src/couch/test/eunit/couch_db_doc_tests.erl
diff --git a/src/couch/test/couch_db_mpr_tests.erl b/src/couch/test/eunit/couch_db_mpr_tests.erl
similarity index 100%
rename from src/couch/test/couch_db_mpr_tests.erl
rename to src/couch/test/eunit/couch_db_mpr_tests.erl
diff --git a/src/couch/test/couch_db_plugin_tests.erl b/src/couch/test/eunit/couch_db_plugin_tests.erl
similarity index 100%
rename from src/couch/test/couch_db_plugin_tests.erl
rename to src/couch/test/eunit/couch_db_plugin_tests.erl
diff --git a/src/couch/test/couch_db_props_upgrade_tests.erl b/src/couch/test/eunit/couch_db_props_upgrade_tests.erl
similarity index 100%
rename from src/couch/test/couch_db_props_upgrade_tests.erl
rename to src/couch/test/eunit/couch_db_props_upgrade_tests.erl
diff --git a/src/couch/test/couch_db_split_tests.erl b/src/couch/test/eunit/couch_db_split_tests.erl
similarity index 100%
rename from src/couch/test/couch_db_split_tests.erl
rename to src/couch/test/eunit/couch_db_split_tests.erl
diff --git a/src/couch/test/couch_db_tests.erl b/src/couch/test/eunit/couch_db_tests.erl
similarity index 100%
rename from src/couch/test/couch_db_tests.erl
rename to src/couch/test/eunit/couch_db_tests.erl
diff --git a/src/couch/test/couch_doc_json_tests.erl b/src/couch/test/eunit/couch_doc_json_tests.erl
similarity index 100%
rename from src/couch/test/couch_doc_json_tests.erl
rename to src/couch/test/eunit/couch_doc_json_tests.erl
diff --git a/src/couch/test/couch_doc_tests.erl b/src/couch/test/eunit/couch_doc_tests.erl
similarity index 100%
rename from src/couch/test/couch_doc_tests.erl
rename to src/couch/test/eunit/couch_doc_tests.erl
diff --git a/src/couch/test/couch_ejson_size_tests.erl b/src/couch/test/eunit/couch_ejson_size_tests.erl
similarity index 100%
rename from src/couch/test/couch_ejson_size_tests.erl
rename to src/couch/test/eunit/couch_ejson_size_tests.erl
diff --git a/src/couch/test/couch_etag_tests.erl b/src/couch/test/eunit/couch_etag_tests.erl
similarity index 100%
rename from src/couch/test/couch_etag_tests.erl
rename to src/couch/test/eunit/couch_etag_tests.erl
diff --git a/src/couch/test/couch_file_tests.erl b/src/couch/test/eunit/couch_file_tests.erl
similarity index 100%
rename from src/couch/test/couch_file_tests.erl
rename to src/couch/test/eunit/couch_file_tests.erl
diff --git a/src/couch/test/couch_flags_config_tests.erl b/src/couch/test/eunit/couch_flags_config_tests.erl
similarity index 100%
rename from src/couch/test/couch_flags_config_tests.erl
rename to src/couch/test/eunit/couch_flags_config_tests.erl
diff --git a/src/couch/test/couch_flags_tests.erl b/src/couch/test/eunit/couch_flags_tests.erl
similarity index 100%
rename from src/couch/test/couch_flags_tests.erl
rename to src/couch/test/eunit/couch_flags_tests.erl
diff --git a/src/couch/test/couch_hotp_tests.erl b/src/couch/test/eunit/couch_hotp_tests.erl
similarity index 100%
rename from src/couch/test/couch_hotp_tests.erl
rename to src/couch/test/eunit/couch_hotp_tests.erl
diff --git a/src/couch/test/couch_index_tests.erl b/src/couch/test/eunit/couch_index_tests.erl
similarity index 100%
rename from src/couch/test/couch_index_tests.erl
rename to src/couch/test/eunit/couch_index_tests.erl
diff --git a/src/couch/test/couch_key_tree_prop_tests.erl b/src/couch/test/eunit/couch_key_tree_prop_tests.erl
similarity index 100%
rename from src/couch/test/couch_key_tree_prop_tests.erl
rename to src/couch/test/eunit/couch_key_tree_prop_tests.erl
diff --git a/src/couch/test/couch_key_tree_tests.erl b/src/couch/test/eunit/couch_key_tree_tests.erl
similarity index 100%
rename from src/couch/test/couch_key_tree_tests.erl
rename to src/couch/test/eunit/couch_key_tree_tests.erl
diff --git a/src/couch/test/couch_passwords_tests.erl b/src/couch/test/eunit/couch_passwords_tests.erl
similarity index 100%
rename from src/couch/test/couch_passwords_tests.erl
rename to src/couch/test/eunit/couch_passwords_tests.erl
diff --git a/src/couch/test/couch_query_servers_tests.erl b/src/couch/test/eunit/couch_query_servers_tests.erl
similarity index 100%
rename from src/couch/test/couch_query_servers_tests.erl
rename to src/couch/test/eunit/couch_query_servers_tests.erl
diff --git a/src/couch/test/couch_server_tests.erl b/src/couch/test/eunit/couch_server_tests.erl
similarity index 100%
rename from src/couch/test/couch_server_tests.erl
rename to src/couch/test/eunit/couch_server_tests.erl
diff --git a/src/couch/test/couch_stream_tests.erl b/src/couch/test/eunit/couch_stream_tests.erl
similarity index 100%
rename from src/couch/test/couch_stream_tests.erl
rename to src/couch/test/eunit/couch_stream_tests.erl
diff --git a/src/couch/test/couch_task_status_tests.erl b/src/couch/test/eunit/couch_task_status_tests.erl
similarity index 100%
rename from src/couch/test/couch_task_status_tests.erl
rename to src/couch/test/eunit/couch_task_status_tests.erl
diff --git a/src/couch/test/couch_totp_tests.erl b/src/couch/test/eunit/couch_totp_tests.erl
similarity index 100%
rename from src/couch/test/couch_totp_tests.erl
rename to src/couch/test/eunit/couch_totp_tests.erl
diff --git a/src/couch/test/couch_util_tests.erl b/src/couch/test/eunit/couch_util_tests.erl
similarity index 100%
rename from src/couch/test/couch_util_tests.erl
rename to src/couch/test/eunit/couch_util_tests.erl
diff --git a/src/couch/test/couch_uuids_tests.erl b/src/couch/test/eunit/couch_uuids_tests.erl
similarity index 100%
rename from src/couch/test/couch_uuids_tests.erl
rename to src/couch/test/eunit/couch_uuids_tests.erl
diff --git a/src/couch/test/couch_work_queue_tests.erl b/src/couch/test/eunit/couch_work_queue_tests.erl
similarity index 100%
rename from src/couch/test/couch_work_queue_tests.erl
rename to src/couch/test/eunit/couch_work_queue_tests.erl
diff --git a/src/couch/test/couchdb_attachments_tests.erl b/src/couch/test/eunit/couchdb_attachments_tests.erl
similarity index 100%
rename from src/couch/test/couchdb_attachments_tests.erl
rename to src/couch/test/eunit/couchdb_attachments_tests.erl
diff --git a/src/couch/test/couchdb_auth_tests.erl b/src/couch/test/eunit/couchdb_auth_tests.erl
similarity index 100%
rename from src/couch/test/couchdb_auth_tests.erl
rename to src/couch/test/eunit/couchdb_auth_tests.erl
diff --git a/src/couch/test/couchdb_cookie_domain_tests.erl b/src/couch/test/eunit/couchdb_cookie_domain_tests.erl
similarity index 100%
rename from src/couch/test/couchdb_cookie_domain_tests.erl
rename to src/couch/test/eunit/couchdb_cookie_domain_tests.erl
diff --git a/src/couch/test/couchdb_cors_tests.erl b/src/couch/test/eunit/couchdb_cors_tests.erl
similarity index 100%
rename from src/couch/test/couchdb_cors_tests.erl
rename to src/couch/test/eunit/couchdb_cors_tests.erl
diff --git a/src/couch/test/couchdb_db_tests.erl b/src/couch/test/eunit/couchdb_db_tests.erl
similarity index 100%
rename from src/couch/test/couchdb_db_tests.erl
rename to src/couch/test/eunit/couchdb_db_tests.erl
diff --git a/src/couch/test/couchdb_design_doc_tests.erl b/src/couch/test/eunit/couchdb_design_doc_tests.erl
similarity index 100%
rename from src/couch/test/couchdb_design_doc_tests.erl
rename to src/couch/test/eunit/couchdb_design_doc_tests.erl
diff --git a/src/couch/test/couchdb_file_compression_tests.erl b/src/couch/test/eunit/couchdb_file_compression_tests.erl
similarity index 100%
rename from src/couch/test/couchdb_file_compression_tests.erl
rename to src/couch/test/eunit/couchdb_file_compression_tests.erl
diff --git a/src/couch/test/couchdb_location_header_tests.erl b/src/couch/test/eunit/couchdb_location_header_tests.erl
similarity index 100%
rename from src/couch/test/couchdb_location_header_tests.erl
rename to src/couch/test/eunit/couchdb_location_header_tests.erl
diff --git a/src/couch/test/couchdb_mrview_cors_tests.erl b/src/couch/test/eunit/couchdb_mrview_cors_tests.erl
similarity index 100%
rename from src/couch/test/couchdb_mrview_cors_tests.erl
rename to src/couch/test/eunit/couchdb_mrview_cors_tests.erl
diff --git a/src/couch/test/couchdb_mrview_tests.erl b/src/couch/test/eunit/couchdb_mrview_tests.erl
similarity index 100%
rename from src/couch/test/couchdb_mrview_tests.erl
rename to src/couch/test/eunit/couchdb_mrview_tests.erl
diff --git a/src/couch/test/couchdb_os_proc_pool.erl b/src/couch/test/eunit/couchdb_os_proc_pool.erl
similarity index 100%
rename from src/couch/test/couchdb_os_proc_pool.erl
rename to src/couch/test/eunit/couchdb_os_proc_pool.erl
diff --git a/src/couch/test/couchdb_update_conflicts_tests.erl b/src/couch/test/eunit/couchdb_update_conflicts_tests.erl
similarity index 100%
rename from src/couch/test/couchdb_update_conflicts_tests.erl
rename to src/couch/test/eunit/couchdb_update_conflicts_tests.erl
diff --git a/src/couch/test/couchdb_vhosts_tests.erl b/src/couch/test/eunit/couchdb_vhosts_tests.erl
similarity index 100%
rename from src/couch/test/couchdb_vhosts_tests.erl
rename to src/couch/test/eunit/couchdb_vhosts_tests.erl
diff --git a/src/couch/test/couchdb_views_tests.erl b/src/couch/test/eunit/couchdb_views_tests.erl
similarity index 100%
rename from src/couch/test/couchdb_views_tests.erl
rename to src/couch/test/eunit/couchdb_views_tests.erl
diff --git a/src/couch/test/fixtures/3b835456c235b1827e012e25666152f3.view b/src/couch/test/eunit/fixtures/3b835456c235b1827e012e25666152f3.view
similarity index 100%
rename from src/couch/test/fixtures/3b835456c235b1827e012e25666152f3.view
rename to src/couch/test/eunit/fixtures/3b835456c235b1827e012e25666152f3.view
diff --git a/src/couch/test/fixtures/couch_stats_aggregates.cfg b/src/couch/test/eunit/fixtures/couch_stats_aggregates.cfg
similarity index 100%
rename from src/couch/test/fixtures/couch_stats_aggregates.cfg
rename to src/couch/test/eunit/fixtures/couch_stats_aggregates.cfg
diff --git a/src/couch/test/fixtures/couch_stats_aggregates.ini b/src/couch/test/eunit/fixtures/couch_stats_aggregates.ini
similarity index 100%
rename from src/couch/test/fixtures/couch_stats_aggregates.ini
rename to src/couch/test/eunit/fixtures/couch_stats_aggregates.ini
diff --git a/src/couch/test/fixtures/db_non_partitioned.couch b/src/couch/test/eunit/fixtures/db_non_partitioned.couch
similarity index 100%
rename from src/couch/test/fixtures/db_non_partitioned.couch
rename to src/couch/test/eunit/fixtures/db_non_partitioned.couch
diff --git a/src/couch/test/fixtures/db_v6_with_1_purge_req.couch b/src/couch/test/eunit/fixtures/db_v6_with_1_purge_req.couch
similarity index 100%
rename from src/couch/test/fixtures/db_v6_with_1_purge_req.couch
rename to src/couch/test/eunit/fixtures/db_v6_with_1_purge_req.couch
diff --git a/src/couch/test/fixtures/db_v6_with_1_purge_req_for_2_docs.couch b/src/couch/test/eunit/fixtures/db_v6_with_1_purge_req_for_2_docs.couch
similarity index 100%
rename from src/couch/test/fixtures/db_v6_with_1_purge_req_for_2_docs.couch
rename to src/couch/test/eunit/fixtures/db_v6_with_1_purge_req_for_2_docs.couch
diff --git a/src/couch/test/fixtures/db_v6_with_2_purge_req.couch b/src/couch/test/eunit/fixtures/db_v6_with_2_purge_req.couch
similarity index 100%
rename from src/couch/test/fixtures/db_v6_with_2_purge_req.couch
rename to src/couch/test/eunit/fixtures/db_v6_with_2_purge_req.couch
diff --git a/src/couch/test/fixtures/db_v6_without_purge_req.couch b/src/couch/test/eunit/fixtures/db_v6_without_purge_req.couch
similarity index 100%
rename from src/couch/test/fixtures/db_v6_without_purge_req.couch
rename to src/couch/test/eunit/fixtures/db_v6_without_purge_req.couch
diff --git a/src/couch/test/fixtures/db_v7_with_1_purge_req.couch b/src/couch/test/eunit/fixtures/db_v7_with_1_purge_req.couch
similarity index 100%
rename from src/couch/test/fixtures/db_v7_with_1_purge_req.couch
rename to src/couch/test/eunit/fixtures/db_v7_with_1_purge_req.couch
diff --git a/src/couch/test/fixtures/db_v7_with_1_purge_req_for_2_docs.couch b/src/couch/test/eunit/fixtures/db_v7_with_1_purge_req_for_2_docs.couch
similarity index 100%
rename from src/couch/test/fixtures/db_v7_with_1_purge_req_for_2_docs.couch
rename to src/couch/test/eunit/fixtures/db_v7_with_1_purge_req_for_2_docs.couch
diff --git a/src/couch/test/fixtures/db_v7_with_2_purge_req.couch b/src/couch/test/eunit/fixtures/db_v7_with_2_purge_req.couch
similarity index 100%
rename from src/couch/test/fixtures/db_v7_with_2_purge_req.couch
rename to src/couch/test/eunit/fixtures/db_v7_with_2_purge_req.couch
diff --git a/src/couch/test/fixtures/db_v7_without_purge_req.couch b/src/couch/test/eunit/fixtures/db_v7_without_purge_req.couch
similarity index 100%
rename from src/couch/test/fixtures/db_v7_without_purge_req.couch
rename to src/couch/test/eunit/fixtures/db_v7_without_purge_req.couch
diff --git a/src/couch/test/fixtures/logo.png b/src/couch/test/eunit/fixtures/logo.png
similarity index 100%
rename from src/couch/test/fixtures/logo.png
rename to src/couch/test/eunit/fixtures/logo.png
diff --git a/src/couch/test/fixtures/multipart.http b/src/couch/test/eunit/fixtures/multipart.http
similarity index 100%
rename from src/couch/test/fixtures/multipart.http
rename to src/couch/test/eunit/fixtures/multipart.http
diff --git a/src/couch/test/fixtures/os_daemon_bad_perm.sh b/src/couch/test/eunit/fixtures/os_daemon_bad_perm.sh
similarity index 100%
rename from src/couch/test/fixtures/os_daemon_bad_perm.sh
rename to src/couch/test/eunit/fixtures/os_daemon_bad_perm.sh
diff --git a/src/couch/test/fixtures/os_daemon_can_reboot.sh b/src/couch/test/eunit/fixtures/os_daemon_can_reboot.sh
similarity index 100%
rename from src/couch/test/fixtures/os_daemon_can_reboot.sh
rename to src/couch/test/eunit/fixtures/os_daemon_can_reboot.sh
diff --git a/src/couch/test/fixtures/os_daemon_configer.escript b/src/couch/test/eunit/fixtures/os_daemon_configer.escript
similarity index 100%
rename from src/couch/test/fixtures/os_daemon_configer.escript
rename to src/couch/test/eunit/fixtures/os_daemon_configer.escript
diff --git a/src/couch/test/fixtures/os_daemon_die_on_boot.sh b/src/couch/test/eunit/fixtures/os_daemon_die_on_boot.sh
similarity index 100%
rename from src/couch/test/fixtures/os_daemon_die_on_boot.sh
rename to src/couch/test/eunit/fixtures/os_daemon_die_on_boot.sh
diff --git a/src/couch/test/fixtures/os_daemon_die_quickly.sh b/src/couch/test/eunit/fixtures/os_daemon_die_quickly.sh
similarity index 100%
rename from src/couch/test/fixtures/os_daemon_die_quickly.sh
rename to src/couch/test/eunit/fixtures/os_daemon_die_quickly.sh
diff --git a/src/couch/test/fixtures/os_daemon_looper.escript b/src/couch/test/eunit/fixtures/os_daemon_looper.escript
similarity index 100%
rename from src/couch/test/fixtures/os_daemon_looper.escript
rename to src/couch/test/eunit/fixtures/os_daemon_looper.escript
diff --git a/src/couch/test/fixtures/test.couch b/src/couch/test/eunit/fixtures/test.couch
similarity index 100%
rename from src/couch/test/fixtures/test.couch
rename to src/couch/test/eunit/fixtures/test.couch
diff --git a/src/couch/test/global_changes_tests.erl b/src/couch/test/eunit/global_changes_tests.erl
similarity index 100%
rename from src/couch/test/global_changes_tests.erl
rename to src/couch/test/eunit/global_changes_tests.erl
diff --git a/src/couch/test/json_stream_parse_tests.erl b/src/couch/test/eunit/json_stream_parse_tests.erl
similarity index 100%
rename from src/couch/test/json_stream_parse_tests.erl
rename to src/couch/test/eunit/json_stream_parse_tests.erl
diff --git a/src/couch/test/test_web.erl b/src/couch/test/eunit/test_web.erl
similarity index 100%
rename from src/couch/test/test_web.erl
rename to src/couch/test/eunit/test_web.erl
diff --git a/src/couch_epi/test/couch_epi_basic_test.erl b/src/couch_epi/test/eunit/couch_epi_basic_test.erl
similarity index 100%
rename from src/couch_epi/test/couch_epi_basic_test.erl
rename to src/couch_epi/test/eunit/couch_epi_basic_test.erl
diff --git a/src/couch_epi/test/couch_epi_tests.erl b/src/couch_epi/test/eunit/couch_epi_tests.erl
similarity index 99%
rename from src/couch_epi/test/couch_epi_tests.erl
rename to src/couch_epi/test/eunit/couch_epi_tests.erl
index 0427532..12d8610 100644
--- a/src/couch_epi/test/couch_epi_tests.erl
+++ b/src/couch_epi/test/eunit/couch_epi_tests.erl
@@ -14,8 +14,8 @@
 
 -include_lib("couch/include/couch_eunit.hrl").
 
--define(DATA_FILE1, ?ABS_PATH("test/fixtures/app_data1.cfg")).
--define(DATA_FILE2, ?ABS_PATH("test/fixtures/app_data2.cfg")).
+-define(DATA_FILE1, ?ABS_PATH("test/eunit/fixtures/app_data1.cfg")).
+-define(DATA_FILE2, ?ABS_PATH("test/eunit/fixtures/app_data2.cfg")).
 
 -export([notify_cb/4, save/3, get/2]).
 
diff --git a/src/couch_epi/test/fixtures/app_data1.cfg b/src/couch_epi/test/eunit/fixtures/app_data1.cfg
similarity index 100%
rename from src/couch_epi/test/fixtures/app_data1.cfg
rename to src/couch_epi/test/eunit/fixtures/app_data1.cfg
diff --git a/src/couch_epi/test/fixtures/app_data2.cfg b/src/couch_epi/test/eunit/fixtures/app_data2.cfg
similarity index 100%
rename from src/couch_epi/test/fixtures/app_data2.cfg
rename to src/couch_epi/test/eunit/fixtures/app_data2.cfg
diff --git a/src/couch_index/test/couch_index_compaction_tests.erl b/src/couch_index/test/eunit/couch_index_compaction_tests.erl
similarity index 100%
rename from src/couch_index/test/couch_index_compaction_tests.erl
rename to src/couch_index/test/eunit/couch_index_compaction_tests.erl
diff --git a/src/couch_index/test/couch_index_ddoc_updated_tests.erl b/src/couch_index/test/eunit/couch_index_ddoc_updated_tests.erl
similarity index 100%
rename from src/couch_index/test/couch_index_ddoc_updated_tests.erl
rename to src/couch_index/test/eunit/couch_index_ddoc_updated_tests.erl
diff --git a/src/couch_log/test/couch_log_config_listener_test.erl b/src/couch_log/test/eunit/couch_log_config_listener_test.erl
similarity index 100%
rename from src/couch_log/test/couch_log_config_listener_test.erl
rename to src/couch_log/test/eunit/couch_log_config_listener_test.erl
diff --git a/src/couch_log/test/couch_log_config_test.erl b/src/couch_log/test/eunit/couch_log_config_test.erl
similarity index 100%
rename from src/couch_log/test/couch_log_config_test.erl
rename to src/couch_log/test/eunit/couch_log_config_test.erl
diff --git a/src/couch_log/test/couch_log_error_logger_h_test.erl b/src/couch_log/test/eunit/couch_log_error_logger_h_test.erl
similarity index 100%
rename from src/couch_log/test/couch_log_error_logger_h_test.erl
rename to src/couch_log/test/eunit/couch_log_error_logger_h_test.erl
diff --git a/src/couch_log/test/couch_log_formatter_test.erl b/src/couch_log/test/eunit/couch_log_formatter_test.erl
similarity index 100%
rename from src/couch_log/test/couch_log_formatter_test.erl
rename to src/couch_log/test/eunit/couch_log_formatter_test.erl
diff --git a/src/couch_log/test/couch_log_monitor_test.erl b/src/couch_log/test/eunit/couch_log_monitor_test.erl
similarity index 100%
rename from src/couch_log/test/couch_log_monitor_test.erl
rename to src/couch_log/test/eunit/couch_log_monitor_test.erl
diff --git a/src/couch_log/test/couch_log_server_test.erl b/src/couch_log/test/eunit/couch_log_server_test.erl
similarity index 100%
rename from src/couch_log/test/couch_log_server_test.erl
rename to src/couch_log/test/eunit/couch_log_server_test.erl
diff --git a/src/couch_log/test/couch_log_test.erl b/src/couch_log/test/eunit/couch_log_test.erl
similarity index 100%
rename from src/couch_log/test/couch_log_test.erl
rename to src/couch_log/test/eunit/couch_log_test.erl
diff --git a/src/couch_log/test/couch_log_test_util.erl b/src/couch_log/test/eunit/couch_log_test_util.erl
similarity index 100%
rename from src/couch_log/test/couch_log_test_util.erl
rename to src/couch_log/test/eunit/couch_log_test_util.erl
diff --git a/src/couch_log/test/couch_log_trunc_io_fmt_test.erl b/src/couch_log/test/eunit/couch_log_trunc_io_fmt_test.erl
similarity index 100%
rename from src/couch_log/test/couch_log_trunc_io_fmt_test.erl
rename to src/couch_log/test/eunit/couch_log_trunc_io_fmt_test.erl
diff --git a/src/couch_log/test/couch_log_util_test.erl b/src/couch_log/test/eunit/couch_log_util_test.erl
similarity index 100%
rename from src/couch_log/test/couch_log_util_test.erl
rename to src/couch_log/test/eunit/couch_log_util_test.erl
diff --git a/src/couch_log/test/couch_log_writer_ets.erl b/src/couch_log/test/eunit/couch_log_writer_ets.erl
similarity index 100%
rename from src/couch_log/test/couch_log_writer_ets.erl
rename to src/couch_log/test/eunit/couch_log_writer_ets.erl
diff --git a/src/couch_log/test/couch_log_writer_file_test.erl b/src/couch_log/test/eunit/couch_log_writer_file_test.erl
similarity index 100%
rename from src/couch_log/test/couch_log_writer_file_test.erl
rename to src/couch_log/test/eunit/couch_log_writer_file_test.erl
diff --git a/src/couch_log/test/couch_log_writer_stderr_test.erl b/src/couch_log/test/eunit/couch_log_writer_stderr_test.erl
similarity index 100%
rename from src/couch_log/test/couch_log_writer_stderr_test.erl
rename to src/couch_log/test/eunit/couch_log_writer_stderr_test.erl
diff --git a/src/couch_log/test/couch_log_writer_syslog_test.erl b/src/couch_log/test/eunit/couch_log_writer_syslog_test.erl
similarity index 100%
rename from src/couch_log/test/couch_log_writer_syslog_test.erl
rename to src/couch_log/test/eunit/couch_log_writer_syslog_test.erl
diff --git a/src/couch_log/test/couch_log_writer_test.erl b/src/couch_log/test/eunit/couch_log_writer_test.erl
similarity index 100%
rename from src/couch_log/test/couch_log_writer_test.erl
rename to src/couch_log/test/eunit/couch_log_writer_test.erl
diff --git a/src/couch_mrview/test/couch_mrview_all_docs_tests.erl b/src/couch_mrview/test/eunit/couch_mrview_all_docs_tests.erl
similarity index 100%
rename from src/couch_mrview/test/couch_mrview_all_docs_tests.erl
rename to src/couch_mrview/test/eunit/couch_mrview_all_docs_tests.erl
diff --git a/src/couch_mrview/test/couch_mrview_changes_since_tests.erl b/src/couch_mrview/test/eunit/couch_mrview_changes_since_tests.erl
similarity index 100%
rename from src/couch_mrview/test/couch_mrview_changes_since_tests.erl
rename to src/couch_mrview/test/eunit/couch_mrview_changes_since_tests.erl
diff --git a/src/couch_mrview/test/couch_mrview_collation_tests.erl b/src/couch_mrview/test/eunit/couch_mrview_collation_tests.erl
similarity index 100%
rename from src/couch_mrview/test/couch_mrview_collation_tests.erl
rename to src/couch_mrview/test/eunit/couch_mrview_collation_tests.erl
diff --git a/src/couch_mrview/test/couch_mrview_compact_tests.erl b/src/couch_mrview/test/eunit/couch_mrview_compact_tests.erl
similarity index 100%
rename from src/couch_mrview/test/couch_mrview_compact_tests.erl
rename to src/couch_mrview/test/eunit/couch_mrview_compact_tests.erl
diff --git a/src/couch_mrview/test/couch_mrview_ddoc_updated_tests.erl b/src/couch_mrview/test/eunit/couch_mrview_ddoc_updated_tests.erl
similarity index 100%
rename from src/couch_mrview/test/couch_mrview_ddoc_updated_tests.erl
rename to src/couch_mrview/test/eunit/couch_mrview_ddoc_updated_tests.erl
diff --git a/src/couch_mrview/test/couch_mrview_ddoc_validation_tests.erl b/src/couch_mrview/test/eunit/couch_mrview_ddoc_validation_tests.erl
similarity index 100%
rename from src/couch_mrview/test/couch_mrview_ddoc_validation_tests.erl
rename to src/couch_mrview/test/eunit/couch_mrview_ddoc_validation_tests.erl
diff --git a/src/couch_mrview/test/couch_mrview_design_docs_tests.erl b/src/couch_mrview/test/eunit/couch_mrview_design_docs_tests.erl
similarity index 100%
rename from src/couch_mrview/test/couch_mrview_design_docs_tests.erl
rename to src/couch_mrview/test/eunit/couch_mrview_design_docs_tests.erl
diff --git a/src/couch_mrview/test/couch_mrview_http_tests.erl b/src/couch_mrview/test/eunit/couch_mrview_http_tests.erl
similarity index 100%
rename from src/couch_mrview/test/couch_mrview_http_tests.erl
rename to src/couch_mrview/test/eunit/couch_mrview_http_tests.erl
diff --git a/src/couch_mrview/test/couch_mrview_index_changes_tests.erl b/src/couch_mrview/test/eunit/couch_mrview_index_changes_tests.erl
similarity index 100%
rename from src/couch_mrview/test/couch_mrview_index_changes_tests.erl
rename to src/couch_mrview/test/eunit/couch_mrview_index_changes_tests.erl
diff --git a/src/couch_mrview/test/couch_mrview_index_info_tests.erl b/src/couch_mrview/test/eunit/couch_mrview_index_info_tests.erl
similarity index 100%
rename from src/couch_mrview/test/couch_mrview_index_info_tests.erl
rename to src/couch_mrview/test/eunit/couch_mrview_index_info_tests.erl
diff --git a/src/couch_mrview/test/couch_mrview_local_docs_tests.erl b/src/couch_mrview/test/eunit/couch_mrview_local_docs_tests.erl
similarity index 100%
rename from src/couch_mrview/test/couch_mrview_local_docs_tests.erl
rename to src/couch_mrview/test/eunit/couch_mrview_local_docs_tests.erl
diff --git a/src/couch_mrview/test/couch_mrview_map_views_tests.erl b/src/couch_mrview/test/eunit/couch_mrview_map_views_tests.erl
similarity index 100%
rename from src/couch_mrview/test/couch_mrview_map_views_tests.erl
rename to src/couch_mrview/test/eunit/couch_mrview_map_views_tests.erl
diff --git a/src/couch_mrview/test/couch_mrview_purge_docs_fabric_tests.erl b/src/couch_mrview/test/eunit/couch_mrview_purge_docs_fabric_tests.erl
similarity index 100%
rename from src/couch_mrview/test/couch_mrview_purge_docs_fabric_tests.erl
rename to src/couch_mrview/test/eunit/couch_mrview_purge_docs_fabric_tests.erl
diff --git a/src/couch_mrview/test/couch_mrview_purge_docs_tests.erl b/src/couch_mrview/test/eunit/couch_mrview_purge_docs_tests.erl
similarity index 100%
rename from src/couch_mrview/test/couch_mrview_purge_docs_tests.erl
rename to src/couch_mrview/test/eunit/couch_mrview_purge_docs_tests.erl
diff --git a/src/couch_mrview/test/couch_mrview_red_views_tests.erl b/src/couch_mrview/test/eunit/couch_mrview_red_views_tests.erl
similarity index 100%
rename from src/couch_mrview/test/couch_mrview_red_views_tests.erl
rename to src/couch_mrview/test/eunit/couch_mrview_red_views_tests.erl
diff --git a/src/couch_mrview/test/couch_mrview_util_tests.erl b/src/couch_mrview/test/eunit/couch_mrview_util_tests.erl
similarity index 100%
rename from src/couch_mrview/test/couch_mrview_util_tests.erl
rename to src/couch_mrview/test/eunit/couch_mrview_util_tests.erl
diff --git a/src/couch_peruser/test/couch_peruser_test.erl b/src/couch_peruser/test/eunit/couch_peruser_test.erl
similarity index 100%
rename from src/couch_peruser/test/couch_peruser_test.erl
rename to src/couch_peruser/test/eunit/couch_peruser_test.erl
diff --git a/src/couch_replicator/test/couch_replicator_attachments_too_large.erl b/src/couch_replicator/test/eunit/couch_replicator_attachments_too_large.erl
similarity index 100%
rename from src/couch_replicator/test/couch_replicator_attachments_too_large.erl
rename to src/couch_replicator/test/eunit/couch_replicator_attachments_too_large.erl
diff --git a/src/couch_replicator/test/couch_replicator_compact_tests.erl b/src/couch_replicator/test/eunit/couch_replicator_compact_tests.erl
similarity index 100%
rename from src/couch_replicator/test/couch_replicator_compact_tests.erl
rename to src/couch_replicator/test/eunit/couch_replicator_compact_tests.erl
diff --git a/src/couch_replicator/test/couch_replicator_connection_tests.erl b/src/couch_replicator/test/eunit/couch_replicator_connection_tests.erl
similarity index 100%
rename from src/couch_replicator/test/couch_replicator_connection_tests.erl
rename to src/couch_replicator/test/eunit/couch_replicator_connection_tests.erl
diff --git a/src/couch_replicator/test/couch_replicator_create_target_with_options_tests.erl b/src/couch_replicator/test/eunit/couch_replicator_create_target_with_options_tests.erl
similarity index 100%
rename from src/couch_replicator/test/couch_replicator_create_target_with_options_tests.erl
rename to src/couch_replicator/test/eunit/couch_replicator_create_target_with_options_tests.erl
diff --git a/src/couch_replicator/test/couch_replicator_filtered_tests.erl b/src/couch_replicator/test/eunit/couch_replicator_filtered_tests.erl
similarity index 100%
rename from src/couch_replicator/test/couch_replicator_filtered_tests.erl
rename to src/couch_replicator/test/eunit/couch_replicator_filtered_tests.erl
diff --git a/src/couch_replicator/test/couch_replicator_httpc_pool_tests.erl b/src/couch_replicator/test/eunit/couch_replicator_httpc_pool_tests.erl
similarity index 100%
rename from src/couch_replicator/test/couch_replicator_httpc_pool_tests.erl
rename to src/couch_replicator/test/eunit/couch_replicator_httpc_pool_tests.erl
diff --git a/src/couch_replicator/test/couch_replicator_id_too_long_tests.erl b/src/couch_replicator/test/eunit/couch_replicator_id_too_long_tests.erl
similarity index 100%
rename from src/couch_replicator/test/couch_replicator_id_too_long_tests.erl
rename to src/couch_replicator/test/eunit/couch_replicator_id_too_long_tests.erl
diff --git a/src/couch_replicator/test/couch_replicator_large_atts_tests.erl b/src/couch_replicator/test/eunit/couch_replicator_large_atts_tests.erl
similarity index 100%
rename from src/couch_replicator/test/couch_replicator_large_atts_tests.erl
rename to src/couch_replicator/test/eunit/couch_replicator_large_atts_tests.erl
diff --git a/src/couch_replicator/test/couch_replicator_many_leaves_tests.erl b/src/couch_replicator/test/eunit/couch_replicator_many_leaves_tests.erl
similarity index 100%
rename from src/couch_replicator/test/couch_replicator_many_leaves_tests.erl
rename to src/couch_replicator/test/eunit/couch_replicator_many_leaves_tests.erl
diff --git a/src/couch_replicator/test/couch_replicator_missing_stubs_tests.erl b/src/couch_replicator/test/eunit/couch_replicator_missing_stubs_tests.erl
similarity index 100%
rename from src/couch_replicator/test/couch_replicator_missing_stubs_tests.erl
rename to src/couch_replicator/test/eunit/couch_replicator_missing_stubs_tests.erl
diff --git a/src/couch_replicator/test/couch_replicator_proxy_tests.erl b/src/couch_replicator/test/eunit/couch_replicator_proxy_tests.erl
similarity index 100%
rename from src/couch_replicator/test/couch_replicator_proxy_tests.erl
rename to src/couch_replicator/test/eunit/couch_replicator_proxy_tests.erl
diff --git a/src/couch_replicator/test/couch_replicator_rate_limiter_tests.erl b/src/couch_replicator/test/eunit/couch_replicator_rate_limiter_tests.erl
similarity index 100%
rename from src/couch_replicator/test/couch_replicator_rate_limiter_tests.erl
rename to src/couch_replicator/test/eunit/couch_replicator_rate_limiter_tests.erl
diff --git a/src/couch_replicator/test/couch_replicator_retain_stats_between_job_runs.erl b/src/couch_replicator/test/eunit/couch_replicator_retain_stats_between_job_runs.erl
similarity index 100%
rename from src/couch_replicator/test/couch_replicator_retain_stats_between_job_runs.erl
rename to src/couch_replicator/test/eunit/couch_replicator_retain_stats_between_job_runs.erl
diff --git a/src/couch_replicator/test/couch_replicator_selector_tests.erl b/src/couch_replicator/test/eunit/couch_replicator_selector_tests.erl
similarity index 100%
rename from src/couch_replicator/test/couch_replicator_selector_tests.erl
rename to src/couch_replicator/test/eunit/couch_replicator_selector_tests.erl
diff --git a/src/couch_replicator/test/couch_replicator_small_max_request_size_target.erl b/src/couch_replicator/test/eunit/couch_replicator_small_max_request_size_target.erl
similarity index 100%
rename from src/couch_replicator/test/couch_replicator_small_max_request_size_target.erl
rename to src/couch_replicator/test/eunit/couch_replicator_small_max_request_size_target.erl
diff --git a/src/couch_replicator/test/couch_replicator_test_helper.erl b/src/couch_replicator/test/eunit/couch_replicator_test_helper.erl
similarity index 100%
rename from src/couch_replicator/test/couch_replicator_test_helper.erl
rename to src/couch_replicator/test/eunit/couch_replicator_test_helper.erl
diff --git a/src/couch_replicator/test/couch_replicator_use_checkpoints_tests.erl b/src/couch_replicator/test/eunit/couch_replicator_use_checkpoints_tests.erl
similarity index 100%
rename from src/couch_replicator/test/couch_replicator_use_checkpoints_tests.erl
rename to src/couch_replicator/test/eunit/couch_replicator_use_checkpoints_tests.erl
diff --git a/src/ddoc_cache/test/ddoc_cache_basic_test.erl b/src/ddoc_cache/test/eunit/ddoc_cache_basic_test.erl
similarity index 100%
rename from src/ddoc_cache/test/ddoc_cache_basic_test.erl
rename to src/ddoc_cache/test/eunit/ddoc_cache_basic_test.erl
diff --git a/src/ddoc_cache/test/ddoc_cache_coverage_test.erl b/src/ddoc_cache/test/eunit/ddoc_cache_coverage_test.erl
similarity index 100%
rename from src/ddoc_cache/test/ddoc_cache_coverage_test.erl
rename to src/ddoc_cache/test/eunit/ddoc_cache_coverage_test.erl
diff --git a/src/ddoc_cache/test/ddoc_cache_disabled_test.erl b/src/ddoc_cache/test/eunit/ddoc_cache_disabled_test.erl
similarity index 100%
rename from src/ddoc_cache/test/ddoc_cache_disabled_test.erl
rename to src/ddoc_cache/test/eunit/ddoc_cache_disabled_test.erl
diff --git a/src/ddoc_cache/test/ddoc_cache_entry_test.erl b/src/ddoc_cache/test/eunit/ddoc_cache_entry_test.erl
similarity index 100%
rename from src/ddoc_cache/test/ddoc_cache_entry_test.erl
rename to src/ddoc_cache/test/eunit/ddoc_cache_entry_test.erl
diff --git a/src/ddoc_cache/test/ddoc_cache_ev.erl b/src/ddoc_cache/test/eunit/ddoc_cache_ev.erl
similarity index 100%
rename from src/ddoc_cache/test/ddoc_cache_ev.erl
rename to src/ddoc_cache/test/eunit/ddoc_cache_ev.erl
diff --git a/src/ddoc_cache/test/ddoc_cache_eviction_test.erl b/src/ddoc_cache/test/eunit/ddoc_cache_eviction_test.erl
similarity index 100%
rename from src/ddoc_cache/test/ddoc_cache_eviction_test.erl
rename to src/ddoc_cache/test/eunit/ddoc_cache_eviction_test.erl
diff --git a/src/ddoc_cache/test/ddoc_cache_lru_test.erl b/src/ddoc_cache/test/eunit/ddoc_cache_lru_test.erl
similarity index 100%
rename from src/ddoc_cache/test/ddoc_cache_lru_test.erl
rename to src/ddoc_cache/test/eunit/ddoc_cache_lru_test.erl
diff --git a/src/ddoc_cache/test/ddoc_cache_no_cache_test.erl b/src/ddoc_cache/test/eunit/ddoc_cache_no_cache_test.erl
similarity index 100%
rename from src/ddoc_cache/test/ddoc_cache_no_cache_test.erl
rename to src/ddoc_cache/test/eunit/ddoc_cache_no_cache_test.erl
diff --git a/src/ddoc_cache/test/ddoc_cache_open_error_test.erl b/src/ddoc_cache/test/eunit/ddoc_cache_open_error_test.erl
similarity index 100%
rename from src/ddoc_cache/test/ddoc_cache_open_error_test.erl
rename to src/ddoc_cache/test/eunit/ddoc_cache_open_error_test.erl
diff --git a/src/ddoc_cache/test/ddoc_cache_open_test.erl b/src/ddoc_cache/test/eunit/ddoc_cache_open_test.erl
similarity index 100%
rename from src/ddoc_cache/test/ddoc_cache_open_test.erl
rename to src/ddoc_cache/test/eunit/ddoc_cache_open_test.erl
diff --git a/src/ddoc_cache/test/ddoc_cache_opener_test.erl b/src/ddoc_cache/test/eunit/ddoc_cache_opener_test.erl
similarity index 100%
rename from src/ddoc_cache/test/ddoc_cache_opener_test.erl
rename to src/ddoc_cache/test/eunit/ddoc_cache_opener_test.erl
diff --git a/src/ddoc_cache/test/ddoc_cache_refresh_test.erl b/src/ddoc_cache/test/eunit/ddoc_cache_refresh_test.erl
similarity index 100%
rename from src/ddoc_cache/test/ddoc_cache_refresh_test.erl
rename to src/ddoc_cache/test/eunit/ddoc_cache_refresh_test.erl
diff --git a/src/ddoc_cache/test/ddoc_cache_remove_test.erl b/src/ddoc_cache/test/eunit/ddoc_cache_remove_test.erl
similarity index 100%
rename from src/ddoc_cache/test/ddoc_cache_remove_test.erl
rename to src/ddoc_cache/test/eunit/ddoc_cache_remove_test.erl
diff --git a/src/ddoc_cache/test/ddoc_cache_test.hrl b/src/ddoc_cache/test/eunit/ddoc_cache_test.hrl
similarity index 100%
rename from src/ddoc_cache/test/ddoc_cache_test.hrl
rename to src/ddoc_cache/test/eunit/ddoc_cache_test.hrl
diff --git a/src/ddoc_cache/test/ddoc_cache_tutil.erl b/src/ddoc_cache/test/eunit/ddoc_cache_tutil.erl
similarity index 100%
rename from src/ddoc_cache/test/ddoc_cache_tutil.erl
rename to src/ddoc_cache/test/eunit/ddoc_cache_tutil.erl
diff --git a/src/fabric/test/fabric_rpc_purge_tests.erl b/src/fabric/test/eunit/fabric_rpc_purge_tests.erl
similarity index 100%
rename from src/fabric/test/fabric_rpc_purge_tests.erl
rename to src/fabric/test/eunit/fabric_rpc_purge_tests.erl
diff --git a/src/global_changes/test/global_changes_hooks_tests.erl b/src/global_changes/test/eunit/global_changes_hooks_tests.erl
similarity index 100%
rename from src/global_changes/test/global_changes_hooks_tests.erl
rename to src/global_changes/test/eunit/global_changes_hooks_tests.erl
diff --git a/src/mem3/test/mem3_cluster_test.erl b/src/mem3/test/eunit/mem3_cluster_test.erl
similarity index 100%
rename from src/mem3/test/mem3_cluster_test.erl
rename to src/mem3/test/eunit/mem3_cluster_test.erl
diff --git a/src/mem3/test/mem3_hash_test.erl b/src/mem3/test/eunit/mem3_hash_test.erl
similarity index 100%
rename from src/mem3/test/mem3_hash_test.erl
rename to src/mem3/test/eunit/mem3_hash_test.erl
diff --git a/src/mem3/test/mem3_rep_test.erl b/src/mem3/test/eunit/mem3_rep_test.erl
similarity index 100%
rename from src/mem3/test/mem3_rep_test.erl
rename to src/mem3/test/eunit/mem3_rep_test.erl
diff --git a/src/mem3/test/mem3_reshard_api_test.erl b/src/mem3/test/eunit/mem3_reshard_api_test.erl
similarity index 100%
rename from src/mem3/test/mem3_reshard_api_test.erl
rename to src/mem3/test/eunit/mem3_reshard_api_test.erl
diff --git a/src/mem3/test/mem3_reshard_changes_feed_test.erl b/src/mem3/test/eunit/mem3_reshard_changes_feed_test.erl
similarity index 100%
rename from src/mem3/test/mem3_reshard_changes_feed_test.erl
rename to src/mem3/test/eunit/mem3_reshard_changes_feed_test.erl
diff --git a/src/mem3/test/mem3_reshard_test.erl b/src/mem3/test/eunit/mem3_reshard_test.erl
similarity index 100%
rename from src/mem3/test/mem3_reshard_test.erl
rename to src/mem3/test/eunit/mem3_reshard_test.erl
diff --git a/src/mem3/test/mem3_ring_prop_tests.erl b/src/mem3/test/eunit/mem3_ring_prop_tests.erl
similarity index 100%
rename from src/mem3/test/mem3_ring_prop_tests.erl
rename to src/mem3/test/eunit/mem3_ring_prop_tests.erl
diff --git a/src/mem3/test/mem3_seeds_test.erl b/src/mem3/test/eunit/mem3_seeds_test.erl
similarity index 100%
rename from src/mem3/test/mem3_seeds_test.erl
rename to src/mem3/test/eunit/mem3_seeds_test.erl
diff --git a/src/mem3/test/mem3_sync_security_test.erl b/src/mem3/test/eunit/mem3_sync_security_test.erl
similarity index 100%
rename from src/mem3/test/mem3_sync_security_test.erl
rename to src/mem3/test/eunit/mem3_sync_security_test.erl
diff --git a/src/mem3/test/mem3_util_test.erl b/src/mem3/test/eunit/mem3_util_test.erl
similarity index 100%
rename from src/mem3/test/mem3_util_test.erl
rename to src/mem3/test/eunit/mem3_util_test.erl


[couchdb] 02/06: Minimal ExUnit setup

Posted by ii...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

iilyak pushed a commit to branch exunit-simplified
in repository https://gitbox.apache.org/repos/asf/couchdb.git

commit d5849629a99603904ce94ce561916ebb66d04600
Author: ILYA Khlopotov <ii...@apache.org>
AuthorDate: Thu May 9 21:49:32 2019 +0000

    Minimal ExUnit setup
---
 test/elixir/.credo.exs => .credo.exs  | 10 +++++++-
 .formatter.exs                        |  9 +++++++
 .gitignore                            |  7 ++++++
 Makefile                              | 18 ++++++++++++--
 Makefile.win                          | 14 +++++++++++
 config/config.exs                     | 30 ++++++++++++++++++++++
 config/dev.exs                        |  1 +
 config/prod.exs                       |  1 +
 config/test.exs                       | 12 +++++++++
 mix.exs                               | 47 +++++++++++++++++++++++++++++++++++
 mix.lock                              |  9 +++++++
 src/couch/test/exunit/test_helper.exs |  2 ++
 12 files changed, 157 insertions(+), 3 deletions(-)

diff --git a/test/elixir/.credo.exs b/.credo.exs
similarity index 96%
rename from test/elixir/.credo.exs
rename to .credo.exs
index e24836c..db301e4 100644
--- a/test/elixir/.credo.exs
+++ b/.credo.exs
@@ -22,7 +22,15 @@
         # In the latter case `**/*.{ex,exs}` will be used.
         #
         included: ["lib/", "src/", "test/", "web/", "apps/"],
-        excluded: [~r"/_build/", ~r"/deps/", ~r"/node_modules/"]
+        excluded: [
+          ~r"/_build/",
+          ~r"/node_modules/",
+          ~r"/src/jason",
+          ~r"/src/httpotion",
+          ~r"/src/credo",
+          ~r"/src/junit_formatter",
+          ~r"/src/bunt"
+        ]
       },
       #
       # If you create your own checks, you must specify the source files for
diff --git a/.formatter.exs b/.formatter.exs
new file mode 100644
index 0000000..28b883d
--- /dev/null
+++ b/.formatter.exs
@@ -0,0 +1,9 @@
+# Used by "mix format"
+[
+  inputs: [
+    "{mix,.formatter}.exs",
+    "{config,src}/*/test/exunit/*.{ex,exs}"
+  ],
+  line_length: 90,
+  rename_deprecated_at: "1.5.0"
+]
diff --git a/.gitignore b/.gitignore
index 36bc130..6b9198d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -104,3 +104,10 @@ src/global_changes/ebin/
 src/mango/ebin/
 src/mango/test/*.pyc
 src/mango/venv/
+
+/_build/
+/src/bunt
+/src/credo/
+/src/httpotion/
+/src/jason/
+/src/junit_formatter/
diff --git a/Makefile b/Makefile
index 0acf828..3d1be51 100644
--- a/Makefile
+++ b/Makefile
@@ -173,6 +173,20 @@ eunit: couch
 	  $(REBAR) -r eunit $(EUNIT_OPTS) apps=$$dir || exit 1; \
 	done
 
+.PHONY: exunit
+# target: exunit - Run ExUnit tests
+exunit: export BUILDDIR = $(shell pwd)
+exunit: export MIX_ENV=test
+exunit: export ERL_LIBS = $(shell pwd)/src
+exunit: export ERL_AFLAGS = -config $(shell pwd)/rel/files/eunit.config
+exunit: export COUCHDB_QUERY_SERVER_JAVASCRIPT = $(shell pwd)/bin/couchjs $(shell pwd)/share/server/main.js
+exunit: couch elixir-check-formatted elixir-credo
+	@mix local.hex --force
+	@mix local.rebar rebar ${REBAR} --force
+	@mix deps.get
+	@$(REBAR) setup_eunit 2> /dev/null
+	@mix test --trace $(EXUNIT_OPTS)
+
 setup-eunit: export BUILDDIR = $(shell pwd)
 setup-eunit: export ERL_AFLAGS = -config $(shell pwd)/rel/files/eunit.config
 setup-eunit:
@@ -233,13 +247,13 @@ elixir-cluster-with-quorum: elixir-check-formatted elixir-credo devclean
 
 .PHONY: elixir-check-formatted
 elixir-check-formatted:
-	@cd test/elixir/ && mix format --check-formatted
+	mix format --check-formatted
 
 # Credo is a static code analysis tool for Elixir.
 # We use it in our tests
 .PHONY: elixir-credo
 elixir-credo:
-	@cd test/elixir/ && mix credo
+	mix credo
 
 .PHONY: javascript
 # target: javascript - Run JavaScript test suites or specific ones defined by suites option
diff --git a/Makefile.win b/Makefile.win
index 99ec712..2c4dc98 100644
--- a/Makefile.win
+++ b/Makefile.win
@@ -144,6 +144,20 @@ eunit: couch
 	@$(REBAR) setup_eunit 2> nul
 	@$(REBAR) -r eunit $(EUNIT_OPTS)
 
+.PHONY: exunit
+# target: exunit - Run ExUnit tests
+exunit: export BUILDDIR = $(shell echo %cd%)
+exunit: export MIX_ENV=test
+exunit: export ERL_LIBS = $(shell echo %cd%)\src
+exunit: export ERL_AFLAGS = -config $(shell echo %cd%)/rel/files/eunit.config
+exunit: export COUCHDB_QUERY_SERVER_JAVASCRIPT = $(shell echo %cd%)/bin/couchjs $(shell echo %cd%)/share/server/main.js
+exunit: couch elixir-check-formatted elixir-credo
+	@mix local.hex --force
+	@mix local.rebar rebar ${REBAR} --force
+	@mix deps.get
+	@$(REBAR) setup_eunit 2> nul
+	@mix test --trace $(EXUNIT_OPTS)
+
 setup-eunit: export BUILDDIR = $(shell pwd)
 setup-eunit: export ERL_AFLAGS = $(shell echo "-config rel/files/eunit.config")
 setup-eunit:
diff --git a/config/config.exs b/config/config.exs
new file mode 100644
index 0000000..8e52433
--- /dev/null
+++ b/config/config.exs
@@ -0,0 +1,30 @@
+# This file is responsible for configuring your application
+# and its dependencies with the aid of the Mix.Config module.
+use Mix.Config
+
+# This configuration is loaded before any dependency and is restricted
+# to this project. If another project depends on this project, this
+# file won't be loaded nor affect the parent project. For this reason,
+# if you want to provide default values for your application for
+# 3rd-party users, it should be done in your "mix.exs" file.
+
+# You can configure your application as:
+#
+#     config :couchdbtest, key: :value
+#
+# and access this configuration in your application as:
+#
+#     Application.get_env(:couchdbtest, :key)
+#
+# You can also configure a 3rd-party app:
+#
+#     config :logger, level: :info
+#
+
+# It is also possible to import configuration files, relative to this
+# directory. For example, you can emulate configuration per environment
+# by uncommenting the line below and defining dev.exs, test.exs and such.
+# Configuration from the imported file will override the ones defined
+# here (which is why it is important to import them last).
+#
+import_config "#{Mix.env}.exs"
\ No newline at end of file
diff --git a/config/dev.exs b/config/dev.exs
new file mode 100644
index 0000000..d2d855e
--- /dev/null
+++ b/config/dev.exs
@@ -0,0 +1 @@
+use Mix.Config
diff --git a/config/prod.exs b/config/prod.exs
new file mode 100644
index 0000000..d2d855e
--- /dev/null
+++ b/config/prod.exs
@@ -0,0 +1 @@
+use Mix.Config
diff --git a/config/test.exs b/config/test.exs
new file mode 100644
index 0000000..c5a5ed2
--- /dev/null
+++ b/config/test.exs
@@ -0,0 +1,12 @@
+use Mix.Config
+
+config :logger,
+  backends: [:console],
+  compile_time_purge_level: :debug,
+  level: :debug
+
+config :kernel,
+  error_logger: false
+
+config :sasl,
+  sasl_error_logger: false
diff --git a/mix.exs b/mix.exs
new file mode 100644
index 0000000..d9c8c21
--- /dev/null
+++ b/mix.exs
@@ -0,0 +1,47 @@
+defmodule CouchDBTest.Mixfile do
+  use Mix.Project
+
+  def project do
+    [
+      app: :couchdbtest,
+      version: "0.1.0",
+      elixir: "~> 1.5",
+      lockfile: Path.expand("mix.lock", __DIR__),
+      deps_path: Path.expand("src", __DIR__),
+      build_path: Path.expand("_build", __DIR__),
+      compilers: [:elixir, :app],
+      start_permanent: Mix.env() == :prod,
+      build_embedded: Mix.env() == :prod,
+      deps: deps(),
+      consolidate_protocols: Mix.env() not in [:test, :dev],
+      test_paths: get_test_paths(),
+      elixirc_paths: elixirc_paths(Mix.env())
+    ]
+  end
+
+  # Run "mix help compile.app" to learn about applications.
+  def application do
+    [
+      extra_applications: [:logger]
+    ]
+  end
+
+  # Specifies which paths to compile per environment.
+  defp elixirc_paths(:test), do: ["test/elixir/lib", "test/elixir/test/support"]
+  defp elixirc_paths(_), do: ["test/elixir/lib"]
+
+  # Run "mix help deps" to learn about dependencies.
+  defp deps() do
+    [
+      {:httpotion, "~> 3.0", only: [:dev, :test], runtime: false},
+      {:jiffy, path: Path.expand("src/jiffy", __DIR__)},
+      {:ibrowse,
+       path: Path.expand("src/ibrowse", __DIR__), override: true, compile: false},
+      {:credo, "~> 1.0.0", only: [:dev, :test], runtime: false}
+    ]
+  end
+
+  def get_test_paths do
+    Path.wildcard("src/*/test/exunit") |> Enum.filter(&File.dir?/1)
+  end
+end
diff --git a/mix.lock b/mix.lock
new file mode 100644
index 0000000..34c0ea9
--- /dev/null
+++ b/mix.lock
@@ -0,0 +1,9 @@
+%{
+  "bunt": {:hex, :bunt, "0.2.0", "951c6e801e8b1d2cbe58ebbd3e616a869061ddadcc4863d0a2182541acae9a38", [:mix], [], "hexpm"},
+  "credo": {:hex, :credo, "1.0.5", "fdea745579f8845315fe6a3b43e2f9f8866839cfbc8562bb72778e9fdaa94214", [:mix], [{:bunt, "~> 0.2.0", [hex: :bunt, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm"},
+  "httpotion": {:hex, :httpotion, "3.1.2", "50e3e559c2ffe8c8908c97e4ffb01efc1c18e8547cc7ce5dd173c9cf0a573a3b", [:mix], [{:ibrowse, "== 4.4.0", [hex: :ibrowse, repo: "hexpm", optional: false]}], "hexpm"},
+  "ibrowse": {:hex, :ibrowse, "4.4.0", "2d923325efe0d2cb09b9c6a047b2835a5eda69d8a47ed6ff8bc03628b764e991", [:rebar3], [], "hexpm"},
+  "jason": {:hex, :jason, "1.1.2", "b03dedea67a99223a2eaf9f1264ce37154564de899fd3d8b9a21b1a6fd64afe7", [:mix], [{:decimal, "~> 1.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm"},
+  "jiffy": {:hex, :jiffy, "0.15.2", "de266c390111fd4ea28b9302f0bc3d7472468f3b8e0aceabfbefa26d08cd73b7", [:rebar3], [], "hexpm"},
+  "junit_formatter": {:hex, :junit_formatter, "3.0.0", "13950d944dbd295da7d8cc4798b8faee808a8bb9b637c88069954eac078ac9da", [:mix], [], "hexpm"},
+}
diff --git a/src/couch/test/exunit/test_helper.exs b/src/couch/test/exunit/test_helper.exs
new file mode 100644
index 0000000..3140500
--- /dev/null
+++ b/src/couch/test/exunit/test_helper.exs
@@ -0,0 +1,2 @@
+ExUnit.configure(formatters: [JUnitFormatter, ExUnit.CLIFormatter])
+ExUnit.start()


[couchdb] 01/06: Fix credo complains for dreyfus

Posted by ii...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

iilyak pushed a commit to branch exunit-simplified
in repository https://gitbox.apache.org/repos/asf/couchdb.git

commit f33378b38e45629c5934e739835571fbbd28bdda
Author: ILYA Khlopotov <ii...@apache.org>
AuthorDate: Thu Jun 27 10:35:05 2019 +0000

    Fix credo complains for dreyfus
---
 src/dreyfus/test/elixir/test/partition_search_test.exs | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/dreyfus/test/elixir/test/partition_search_test.exs b/src/dreyfus/test/elixir/test/partition_search_test.exs
index 052a41a..4400d7b 100644
--- a/src/dreyfus/test/elixir/test/partition_search_test.exs
+++ b/src/dreyfus/test/elixir/test/partition_search_test.exs
@@ -26,12 +26,12 @@ defmodule PartitionSearchTest do
   end
 
   def create_ddoc(db_name, opts \\ %{}) do
-    indexFn = "function(doc) {\n  if (doc.some) {\n    index('some', doc.some);\n }\n}"
+    index_fn = "function(doc) {\n  if (doc.some) {\n    index('some', doc.some);\n }\n}"
     default_ddoc = %{
       indexes: %{
         books: %{
           analyzer: %{name: "standard"},
-          index: indexFn
+          index: index_fn
         }
       }
     }