Skip to content

Commit 043b846

Browse files
committed
added new test functions, added some convenience function for dropping and creating indexes
1 parent eef5579 commit 043b846

File tree

5 files changed

+149
-20
lines changed

5 files changed

+149
-20
lines changed

lib/mongo.ex

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1041,6 +1041,27 @@ defmodule Mongo do
10411041
end
10421042
end
10431043

1044+
@doc """
1045+
Convenient function to creates new indexes in the collection `coll`.
1046+
"""
1047+
@spec create_indexes(GenServer.server, String.t, Keyword.t, Keyword.t) :: :ok | {:error, Mongo.Error.t}
1048+
def create_indexes(topology_pid, coll, indexes, opts \\ []) do
1049+
cmd = [createIndexes: coll, indexes: indexes]
1050+
with {:ok, _} <- Mongo.issue_command(topology_pid, cmd, :write, opts) do
1051+
:ok
1052+
end
1053+
end
1054+
1055+
@doc """
1056+
Convenient function that drops the collection `coll`.
1057+
"""
1058+
@spec drop_collection(GenServer.server, String.t, Keyword.t) :: :ok | {:error, Mongo.Error.t}
1059+
def drop_collection(topology_pid, coll, opts \\ []) do
1060+
with {:ok, _} <- Mongo.issue_command(topology_pid, [drop: coll], :write, opts) do
1061+
:ok
1062+
end
1063+
end
1064+
10441065
@doc """
10451066
Getting Collection Names
10461067
"""

lib/mongo/grid_fs/bucket.ex

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -96,10 +96,12 @@ defmodule Mongo.GridFs.Bucket do
9696
Drops the files and chunks collections associated with
9797
this bucket.
9898
"""
99-
@spec drop(Bucket.t) :: Mongo.result(BSON.document)
99+
@spec drop(Bucket.t) :: :ok | {:error, Mongo.Error.t}
100100
def drop(%Bucket{topology_pid: topology_pid, opts: opts} = bucket) do
101-
{:ok, _} = Mongo.issue_command(topology_pid, [drop: files_collection_name(bucket)], :write, opts)
102-
{:ok, _} = Mongo.issue_command(topology_pid, [drop: chunks_collection_name(bucket)], :write, opts)
101+
with :ok <- Mongo.drop_collection(topology_pid, files_collection_name(bucket), opts),
102+
:ok <- Mongo.drop_collection(topology_pid, chunks_collection_name(bucket), opts) do
103+
:ok
104+
end
103105
end
104106

105107
@doc """
@@ -212,20 +214,14 @@ defmodule Mongo.GridFs.Bucket do
212214
# Creates the indexes for the fs.chunks collection
213215
#
214216
defp create_chunks_index(%Bucket{topology_pid: topology_pid, opts: opts} = bucket) do
215-
cmd = [createIndexes: chunks_collection_name(bucket), indexes: [[key: [files_id: 1, n: 1], name: @chunks_index_name, unique: true]]]
216-
with {:ok, _} <- Mongo.issue_command(topology_pid, cmd, :write, opts) do
217-
:ok
218-
end
217+
Mongo.create_indexes(topology_pid, chunks_collection_name(bucket), [[key: [files_id: 1, n: 1], name: @chunks_index_name, unique: true]], opts)
219218
end
220219

221220
##
222221
# Creates the indexes for the fs.files collection
223222
#
224223
defp create_files_index(%Bucket{topology_pid: topology_pid, opts: opts} = bucket) do
225-
cmd = [createIndexes: files_collection_name(bucket), indexes: [[key: [filename: 1, uploadDate: 1], name: @files_index_name]]]
226-
with {:ok, _} <- Mongo.issue_command(topology_pid, cmd, :write, opts) do
227-
:ok
228-
end
224+
Mongo.create_indexes(topology_pid, files_collection_name(bucket), [[key: [filename: 1, uploadDate: 1], name: @files_index_name]], opts)
229225
end
230226

231227
end

lib/session/session_pool.ex

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -38,22 +38,19 @@ defmodule Mongo.Session.SessionPool do
3838
@spec checkin(GenServer.server, ServerSession.t) :: none()
3939
@compile {:inline, checkin: 2}
4040
def checkin(%{queue: queue, timeout: timeout} = pool, session) do
41-
42-
# queue = prune(queue, timeout)
43-
4441
case ServerSession.about_to_expire?(session, timeout) do
4542
true -> %{pool | queue: queue}
4643
false -> %{pool | queue: [session | queue]}
4744
end
4845
end
4946

5047
##
51-
# remove all old sessions
48+
# remove all old sessions, dead code
5249
#
53-
def prune(%{queue: queue, timeout: timeout} = pool) do
54-
queue = Enum.reject(queue, fn session -> ServerSession.about_to_expire?(session, timeout) end)
55-
%{pool | queue: queue}
56-
end
50+
#def prune(%{queue: queue, timeout: timeout} = pool) do
51+
# queue = Enum.reject(queue, fn session -> ServerSession.about_to_expire?(session, timeout) end)
52+
# %{pool | queue: queue}
53+
#end
5754

5855
##
5956
# find the next valid sessions and removes all sessions that timed out

test/mongo/grid_fs/download_test.exs

Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
defmodule Mongo.GridFs.DownloadTest do
2+
use ExUnit.Case
3+
4+
alias Mongo.GridFs.Bucket
5+
alias Mongo.GridFs.Upload
6+
alias Mongo.GridFs.Download
7+
alias BSON.ObjectId
8+
9+
setup_all do
10+
assert {:ok, pid} = Mongo.TestConnection.connect
11+
bucket = Bucket.new(pid)
12+
13+
upload_stream = Upload.open_upload_stream(bucket, "test.jpg", nil)
14+
src_filename = "./test/data/test.jpg"
15+
File.stream!(src_filename, [], 512) |> Stream.into(upload_stream) |> Stream.run()
16+
file_id = upload_stream.id
17+
assert file_id != nil
18+
19+
{:ok, [pid: pid, bucket: bucket, id: file_id]}
20+
end
21+
22+
test "open_download_stream - binary", c do
23+
24+
dest_filename = "/tmp/my-test-file.jps"
25+
File.rm(dest_filename)
26+
27+
with {:ok, stream} <- Download.open_download_stream(c.bucket, ObjectId.encode!(c.id)) do
28+
stream
29+
|> Stream.into(File.stream!(dest_filename))
30+
|> Stream.run
31+
end
32+
33+
assert true == File.exists?(dest_filename)
34+
35+
end
36+
37+
test "open_download_stream - object id", c do
38+
39+
dest_filename = "/tmp/my-test-file.jps"
40+
File.rm(dest_filename)
41+
42+
with {:ok, stream} <- Download.open_download_stream(c.bucket, c.id) do
43+
stream
44+
|> Stream.into(File.stream!(dest_filename))
45+
|> Stream.run
46+
end
47+
48+
assert true == File.exists?(dest_filename)
49+
50+
end
51+
52+
test "open_download_stream - map ", c do
53+
54+
assert c.id != nil
55+
file = Download.find_one_file(c.bucket, c.id)
56+
57+
dest_filename = "/tmp/my-test-file.jps"
58+
File.rm(dest_filename)
59+
60+
with {:ok, stream} <- Download.open_download_stream(c.bucket, file) do
61+
stream
62+
|> Stream.into(File.stream!(dest_filename))
63+
|> Stream.run
64+
end
65+
66+
assert true == File.exists?(dest_filename)
67+
68+
end
69+
70+
test "find_and_stream", c do
71+
72+
dest_filename = "/tmp/my-test-file.jps"
73+
File.rm(dest_filename)
74+
75+
with {{:ok, stream}, file_info} <- Download.find_and_stream(c.bucket, c.id) do
76+
stream
77+
|> Stream.into(File.stream!(dest_filename))
78+
|> Stream.run
79+
assert file_info["filename"] == "test.jpg"
80+
end
81+
82+
assert true == File.exists?(dest_filename)
83+
84+
File.rm(dest_filename)
85+
86+
with {{:ok, stream}, file_info} <- Download.find_and_stream(c.bucket, ObjectId.encode!(c.id)) do
87+
stream
88+
|> Stream.into(File.stream!(dest_filename))
89+
|> Stream.run
90+
assert file_info["filename"] == "test.jpg"
91+
end
92+
93+
assert true == File.exists?(dest_filename)
94+
95+
end
96+
97+
test "find_one_file - filename ", c do
98+
99+
assert c.id != nil
100+
file = Download.find_one_file(c.bucket, "test.jpg")
101+
102+
dest_filename = "/tmp/my-test-file.jps"
103+
File.rm(dest_filename)
104+
105+
with {:ok, stream} <- Download.open_download_stream(c.bucket, file) do
106+
stream
107+
|> Stream.into(File.stream!(dest_filename))
108+
|> Stream.run
109+
end
110+
111+
assert true == File.exists?(dest_filename)
112+
113+
end
114+
115+
end

test/mongo/session_test.exs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ defmodule Mongo.SessionTest do
7474
{session_a, session_pool} = SessionPool.checkout(session_pool)
7575
{session_b, session_pool} = SessionPool.checkout(session_pool)
7676

77-
session_a = session_a|> make_old(-59)
77+
session_a = session_a |> make_old(-59)
7878
session_b = session_b |> make_old(-59)
7979

8080
session_pool = SessionPool.checkin(session_pool, session_a)

0 commit comments

Comments
 (0)