Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
M
mongo-php-library
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
sinan
mongo-php-library
Commits
dccf20aa
Commit
dccf20aa
authored
Jan 12, 2017
by
Jeremy Mikola
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #324
parents
391334a8
fcdc117c
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
168 additions
and
2 deletions
+168
-2
StreamWrapper.php
src/GridFS/StreamWrapper.php
+16
-1
WritableStream.php
src/GridFS/WritableStream.php
+1
-1
StreamWrapperFunctionalTest.php
tests/GridFS/StreamWrapperFunctionalTest.php
+135
-0
WritableStreamFunctionalTest.php
tests/GridFS/WritableStreamFunctionalTest.php
+16
-0
No files found.
src/GridFS/StreamWrapper.php
View file @
dccf20aa
...
@@ -17,6 +17,7 @@
...
@@ -17,6 +17,7 @@
namespace
MongoDB\GridFS
;
namespace
MongoDB\GridFS
;
use
MongoDB\BSON\UTCDateTime
;
use
Exception
;
use
Exception
;
/**
/**
...
@@ -145,9 +146,23 @@ class StreamWrapper
...
@@ -145,9 +146,23 @@ class StreamWrapper
{
{
$stat
=
$this
->
getStatTemplate
();
$stat
=
$this
->
getStatTemplate
();
$stat
[
2
]
=
$stat
[
'mode'
]
=
$this
->
mode
;
$stat
[
2
]
=
$stat
[
'mode'
]
=
$this
->
stream
instanceof
ReadableStream
?
0100444
// S_IFREG & S_IRUSR & S_IRGRP & S_IROTH
:
0100222
;
// S_IFREG & S_IWUSR & S_IWGRP & S_IWOTH
$stat
[
7
]
=
$stat
[
'size'
]
=
$this
->
stream
->
getSize
();
$stat
[
7
]
=
$stat
[
'size'
]
=
$this
->
stream
->
getSize
();
$file
=
$this
->
stream
->
getFile
();
if
(
isset
(
$file
->
uploadDate
)
&&
$file
->
uploadDate
instanceof
UTCDateTime
)
{
$timestamp
=
$file
->
uploadDate
->
toDateTime
()
->
getTimestamp
();
$stat
[
9
]
=
$stat
[
'mtime'
]
=
$timestamp
;
$stat
[
10
]
=
$stat
[
'ctime'
]
=
$timestamp
;
}
if
(
isset
(
$file
->
chunkSize
)
&&
is_integer
(
$file
->
chunkSize
))
{
$stat
[
11
]
=
$stat
[
'blksize'
]
=
$file
->
chunkSize
;
}
return
$stat
;
return
$stat
;
}
}
...
...
src/GridFS/WritableStream.php
View file @
dccf20aa
...
@@ -158,7 +158,7 @@ class WritableStream
...
@@ -158,7 +158,7 @@ class WritableStream
*/
*/
public
function
getSize
()
public
function
getSize
()
{
{
return
$this
->
length
;
return
$this
->
length
+
strlen
(
$this
->
buffer
)
;
}
}
/**
/**
...
...
tests/GridFS/StreamWrapperFunctionalTest.php
0 → 100644
View file @
dccf20aa
<?php
namespace
MongoDB\Tests\GridFS
;
use
MongoDB\BSON\Binary
;
use
MongoDB\BSON\UTCDateTime
;
/**
* Functional tests for the internal StreamWrapper class.
*/
class
StreamWrapperFunctionalTest
extends
FunctionalTestCase
{
public
function
setUp
()
{
parent
::
setUp
();
$this
->
filesCollection
->
insertMany
([
[
'_id'
=>
'length-10'
,
'length'
=>
10
,
'chunkSize'
=>
4
,
'uploadDate'
=>
new
UTCDateTime
(
'1484202200000'
)],
]);
$this
->
chunksCollection
->
insertMany
([
[
'_id'
=>
1
,
'files_id'
=>
'length-10'
,
'n'
=>
0
,
'data'
=>
new
Binary
(
'abcd'
,
Binary
::
TYPE_GENERIC
)],
[
'_id'
=>
2
,
'files_id'
=>
'length-10'
,
'n'
=>
1
,
'data'
=>
new
Binary
(
'efgh'
,
Binary
::
TYPE_GENERIC
)],
[
'_id'
=>
3
,
'files_id'
=>
'length-10'
,
'n'
=>
2
,
'data'
=>
new
Binary
(
'ij'
,
Binary
::
TYPE_GENERIC
)],
]);
}
public
function
testReadableStreamClose
()
{
$stream
=
$this
->
bucket
->
openDownloadStream
(
'length-10'
);
$this
->
assertTrue
(
fclose
(
$stream
));
}
public
function
testReadableStreamEof
()
{
$stream
=
$this
->
bucket
->
openDownloadStream
(
'length-10'
);
$this
->
assertFalse
(
feof
(
$stream
));
$this
->
assertStreamContents
(
'abcdefghij'
,
$stream
);
$this
->
assertTrue
(
feof
(
$stream
));
}
public
function
testReadableStreamRead
()
{
$stream
=
$this
->
bucket
->
openDownloadStream
(
'length-10'
);
$this
->
assertSame
(
'abc'
,
fread
(
$stream
,
3
));
$this
->
assertSame
(
'defghij'
,
fread
(
$stream
,
10
));
$this
->
assertSame
(
''
,
fread
(
$stream
,
3
));
}
public
function
testReadableStreamStat
()
{
$stream
=
$this
->
bucket
->
openDownloadStream
(
'length-10'
);
$stat
=
fstat
(
$stream
);
$this
->
assertSame
(
0100444
,
$stat
[
2
]);
$this
->
assertSame
(
0100444
,
$stat
[
'mode'
]);
$this
->
assertSame
(
10
,
$stat
[
7
]);
$this
->
assertSame
(
10
,
$stat
[
'size'
]);
$this
->
assertSame
(
1484202200
,
$stat
[
9
]);
$this
->
assertSame
(
1484202200
,
$stat
[
'mtime'
]);
$this
->
assertSame
(
1484202200
,
$stat
[
10
]);
$this
->
assertSame
(
1484202200
,
$stat
[
'ctime'
]);
$this
->
assertSame
(
4
,
$stat
[
11
]);
$this
->
assertSame
(
4
,
$stat
[
'blksize'
]);
}
public
function
testReadableStreamWrite
()
{
$stream
=
$this
->
bucket
->
openDownloadStream
(
'length-10'
);
$this
->
assertSame
(
0
,
fwrite
(
$stream
,
'foobar'
));
}
public
function
testWritableStreamClose
()
{
$stream
=
$this
->
bucket
->
openUploadStream
(
'filename'
);
$this
->
assertSame
(
6
,
fwrite
(
$stream
,
'foobar'
));
$this
->
assertTrue
(
fclose
(
$stream
));
$this
->
assertStreamContents
(
'foobar'
,
$this
->
bucket
->
openDownloadStreamByName
(
'filename'
));
}
public
function
testWritableStreamEof
()
{
$stream
=
$this
->
bucket
->
openUploadStream
(
'filename'
);
$this
->
assertFalse
(
feof
(
$stream
));
$this
->
assertSame
(
6
,
fwrite
(
$stream
,
'foobar'
));
$this
->
assertFalse
(
feof
(
$stream
));
}
public
function
testWritableStreamRead
()
{
$stream
=
$this
->
bucket
->
openUploadStream
(
'filename'
);
$this
->
assertSame
(
''
,
fread
(
$stream
,
8192
));
$this
->
assertSame
(
6
,
fwrite
(
$stream
,
'foobar'
));
$this
->
assertSame
(
''
,
fread
(
$stream
,
8192
));
}
public
function
testWritableStreamStat
()
{
$currentTimestamp
=
time
();
$stream
=
$this
->
bucket
->
openUploadStream
(
'filename'
,
[
'chunkSizeBytes'
=>
1024
]);
$stat
=
fstat
(
$stream
);
$this
->
assertSame
(
0100222
,
$stat
[
2
]);
$this
->
assertSame
(
0100222
,
$stat
[
'mode'
]);
$this
->
assertSame
(
0
,
$stat
[
7
]);
$this
->
assertSame
(
0
,
$stat
[
'size'
]);
$this
->
assertGreaterThanOrEqual
(
$currentTimestamp
,
$stat
[
9
]);
$this
->
assertGreaterThanOrEqual
(
$currentTimestamp
,
$stat
[
'mtime'
]);
$this
->
assertGreaterThanOrEqual
(
$currentTimestamp
,
$stat
[
10
]);
$this
->
assertGreaterThanOrEqual
(
$currentTimestamp
,
$stat
[
'ctime'
]);
$this
->
assertSame
(
1024
,
$stat
[
11
]);
$this
->
assertSame
(
1024
,
$stat
[
'blksize'
]);
$this
->
assertSame
(
6
,
fwrite
(
$stream
,
'foobar'
));
$stat
=
fstat
(
$stream
);
$this
->
assertSame
(
6
,
$stat
[
7
]);
$this
->
assertSame
(
6
,
$stat
[
'size'
]);
}
public
function
testWritableStreamWrite
()
{
$stream
=
$this
->
bucket
->
openUploadStream
(
'filename'
);
$this
->
assertSame
(
6
,
fwrite
(
$stream
,
'foobar'
));
}
}
tests/GridFS/WritableStreamFunctionalTest.php
View file @
dccf20aa
...
@@ -61,6 +61,22 @@ class WritableStreamFunctionalTest extends FunctionalTestCase
...
@@ -61,6 +61,22 @@ class WritableStreamFunctionalTest extends FunctionalTestCase
new
WritableStream
(
$this
->
collectionWrapper
,
'filename'
,
[
'chunkSizeBytes'
=>
0
]);
new
WritableStream
(
$this
->
collectionWrapper
,
'filename'
,
[
'chunkSizeBytes'
=>
0
]);
}
}
public
function
testWriteBytesAlwaysUpdatesFileSize
()
{
$stream
=
new
WritableStream
(
$this
->
collectionWrapper
,
'filename'
,
[
'chunkSizeBytes'
=>
1024
]);
$this
->
assertSame
(
0
,
$stream
->
getSize
());
$this
->
assertSame
(
512
,
$stream
->
writeBytes
(
str_repeat
(
'a'
,
512
)));
$this
->
assertSame
(
512
,
$stream
->
getSize
());
$this
->
assertSame
(
512
,
$stream
->
writeBytes
(
str_repeat
(
'a'
,
512
)));
$this
->
assertSame
(
1024
,
$stream
->
getSize
());
$this
->
assertSame
(
512
,
$stream
->
writeBytes
(
str_repeat
(
'a'
,
512
)));
$this
->
assertSame
(
1536
,
$stream
->
getSize
());
$stream
->
close
();
$this
->
assertSame
(
1536
,
$stream
->
getSize
());
}
/**
/**
* @dataProvider provideInputDataAndExpectedMD5
* @dataProvider provideInputDataAndExpectedMD5
*/
*/
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment