Skip to content

Commit 826eaf3

Browse files
committed
B2B-2037: [AWS S3] [Integration Tests]: Investigate Test Failures in MediaGallerySynchronization & MediaGallerySynchronizationMetadata modules
1 parent 576fda5 commit 826eaf3

File tree

4 files changed

+74
-31
lines changed

4 files changed

+74
-31
lines changed

app/code/Magento/MediaGalleryMetadata/Model/Gif/ReadFile.php

Lines changed: 36 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,12 @@
77

88
namespace Magento\MediaGalleryMetadata\Model\Gif;
99

10+
use Magento\Framework\App\ObjectManager;
1011
use Magento\Framework\Exception\FileSystemException;
1112
use Magento\Framework\Exception\LocalizedException;
1213
use Magento\Framework\App\Filesystem\DirectoryList;
1314
use Magento\Framework\Filesystem\DriverInterface;
15+
use Magento\MediaGalleryMetadata\Model\SegmentNames;
1416
use Magento\MediaGalleryMetadataApi\Model\FileInterface;
1517
use Magento\MediaGalleryMetadataApi\Model\FileInterfaceFactory;
1618
use Magento\MediaGalleryMetadataApi\Model\ReadFileInterface;
@@ -34,6 +36,11 @@ class ReadFile implements ReadFileInterface
3436
*/
3537
private $filesystem;
3638

39+
/**
40+
* @var SegmentNames
41+
*/
42+
private $segmentNames;
43+
3744
/**
3845
* @var SegmentInterfaceFactory
3946
*/
@@ -45,40 +52,44 @@ class ReadFile implements ReadFileInterface
4552
private $fileFactory;
4653

4754
/**
55+
* @param DriverInterface $driver
4856
* @param FileInterfaceFactory $fileFactory
4957
* @param SegmentInterfaceFactory $segmentFactory
50-
* @param Filesystem $filesystem
51-
* @throws FileSystemException
58+
* @param SegmentNames $segmentNames
59+
* @param Filesystem|null $filesystem
60+
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
5261
*/
5362
public function __construct(
63+
DriverInterface $driver,
5464
FileInterfaceFactory $fileFactory,
5565
SegmentInterfaceFactory $segmentFactory,
56-
Filesystem $filesystem
66+
SegmentNames $segmentNames,
67+
Filesystem $filesystem = null
5768
) {
5869
$this->fileFactory = $fileFactory;
5970
$this->segmentFactory = $segmentFactory;
60-
$this->filesystem = $filesystem;
61-
$this->driver = $this->filesystem->getDirectoryWrite(DirectoryList::MEDIA)->getDriver();
71+
$this->segmentNames = $segmentNames;
72+
$this->filesystem = $filesystem ?? ObjectManager::getInstance()->get(Filesystem::class);
6273
}
6374

6475
/**
6576
* @inheritdoc
6677
*/
6778
public function execute(string $path): FileInterface
6879
{
69-
$resource = $this->driver->fileOpen($path, 'rb');
80+
$resource = $this->getDriver()->fileOpen($path, 'rb');
7081

7182
$header = $this->read($resource, 3);
7283

7384
if ($header != "GIF") {
74-
$this->driver->fileClose($resource);
85+
$this->getDriver()->fileClose($resource);
7586
throw new ValidatorException(__('Not a GIF image'));
7687
}
7788

7889
$version = $this->read($resource, 3);
7990

8091
if (!in_array($version, ['87a', '89a'])) {
81-
$this->driver->fileClose($resource);
92+
$this->getDriver()->fileClose($resource);
8293
throw new LocalizedException(__('Unexpected GIF version'));
8394
}
8495

@@ -103,7 +114,7 @@ public function execute(string $path): FileInterface
103114

104115
array_unshift($segments, $headerSegment, $generalSegment);
105116

106-
$this->driver->fileClose($resource);
117+
$this->getDriver()->fileClose($resource);
107118

108119
return $this->fileFactory->create([
109120
'path' => $path,
@@ -145,7 +156,7 @@ private function getSegments($resource): array
145156
}
146157

147158
$segments[] = $this->getExtensionSegment($resource);
148-
} while (!$this->driver->endOfFile($resource));
159+
} while (!$this->getDriver()->endOfFile($resource));
149160

150161
return $segments;
151162
}
@@ -274,8 +285,8 @@ private function read($resource, int $length): string
274285
{
275286
$data = '';
276287

277-
while (!$this->driver->endOfFile($resource) && strlen($data) < $length) {
278-
$data .= $this->driver->fileRead($resource, $length - strlen($data));
288+
while (!$this->getDriver()->endOfFile($resource) && strlen($data) < $length) {
289+
$data .= $this->getDriver()->fileRead($resource, $length - strlen($data));
279290
}
280291

281292
return $data;
@@ -317,4 +328,17 @@ private function readBlock($resource): string
317328
}
318329
return $blockLengthBinary . $this->read($resource, $blockLength) . $this->read($resource, 1);
319330
}
331+
332+
/**
333+
* @return DriverInterface
334+
* @throws FileSystemException
335+
*/
336+
private function getDriver(): DriverInterface
337+
{
338+
if ($this->driver === null) {
339+
$this->driver = $this->filesystem->getDirectoryWrite(DirectoryList::MEDIA)->getDriver();
340+
}
341+
342+
return $this->driver;
343+
}
320344
}

app/code/Magento/MediaGalleryMetadata/Model/Gif/WriteFile.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,13 +41,13 @@ class WriteFile implements WriteFileInterface
4141
/**
4242
* @param DriverInterface $driver
4343
* @param SegmentNames $segmentNames
44-
* @param Filesystem $filesystem
44+
* @param Filesystem|null $filesystem
4545
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
4646
*/
4747
public function __construct(
4848
DriverInterface $driver,
4949
SegmentNames $segmentNames,
50-
Filesystem $filesystem
50+
Filesystem $filesystem = null
5151
) {
5252
$this->segmentNames = $segmentNames;
5353
$this->filesystem = $filesystem ?? ObjectManager::getInstance()->get(Filesystem::class);

app/code/Magento/MediaGalleryMetadata/Model/Jpeg/ReadFile.php

Lines changed: 30 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
namespace Magento\MediaGalleryMetadata\Model\Jpeg;
99

10+
use Magento\Framework\App\ObjectManager;
1011
use Magento\Framework\Exception\FileSystemException;
1112
use Magento\Framework\App\Filesystem\DirectoryList;
1213
use Magento\Framework\Exception\LocalizedException;
@@ -59,23 +60,24 @@ class ReadFile implements ReadFileInterface
5960
private $segmentNames;
6061

6162
/**
63+
* @param DriverInterface $driver
6264
* @param FileInterfaceFactory $fileFactory
6365
* @param SegmentInterfaceFactory $segmentFactory
6466
* @param SegmentNames $segmentNames
65-
* @param Filesystem $filesystem
66-
* @throws FileSystemException
67+
* @param Filesystem|null $filesystem
68+
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
6769
*/
6870
public function __construct(
71+
DriverInterface $driver,
6972
FileInterfaceFactory $fileFactory,
7073
SegmentInterfaceFactory $segmentFactory,
7174
SegmentNames $segmentNames,
72-
Filesystem $filesystem
75+
Filesystem $filesystem = null
7376
) {
7477
$this->fileFactory = $fileFactory;
7578
$this->segmentFactory = $segmentFactory;
7679
$this->segmentNames = $segmentNames;
77-
$this->filesystem = $filesystem;
78-
$this->driver = $this->filesystem->getDirectoryWrite(DirectoryList::MEDIA)->getDriver();
80+
$this->filesystem = $filesystem ?? ObjectManager::getInstance()->get(Filesystem::class);
7981
}
8082

8183
/**
@@ -87,13 +89,13 @@ public function __construct(
8789
*/
8890
private function isApplicable(string $path): bool
8991
{
90-
$resource = $this->driver->fileOpen($path, 'rb');
92+
$resource = $this->getDriver()->fileOpen($path, 'rb');
9193
try {
9294
$marker = $this->readMarker($resource);
9395
} catch (LocalizedException $exception) {
9496
return false;
9597
}
96-
$this->driver->fileClose($resource);
98+
$this->getDriver()->fileClose($resource);
9799

98100
return $marker == self::MARKER_IMAGE_FILE_START;
99101
}
@@ -107,18 +109,18 @@ public function execute(string $path): FileInterface
107109
throw new ValidatorException(__('Not a JPEG image'));
108110
}
109111

110-
$resource = $this->driver->fileOpen($path, 'rb');
112+
$resource = $this->getDriver()->fileOpen($path, 'rb');
111113
$marker = $this->readMarker($resource);
112114

113115
if ($marker != self::MARKER_IMAGE_FILE_START) {
114-
$this->driver->fileClose($resource);
116+
$this->getDriver()->fileClose($resource);
115117
throw new ValidatorException(__('Not a JPEG image'));
116118
}
117119

118120
do {
119121
$marker = $this->readMarker($resource);
120122
$segments[] = $this->readSegment($resource, ord($marker));
121-
} while (($marker != self::MARKER_IMAGE_START) && (!$this->driver->endOfFile($resource)));
123+
} while (($marker != self::MARKER_IMAGE_START) && (!$this->getDriver()->endOfFile($resource)));
122124

123125
if ($marker != self::MARKER_IMAGE_START) {
124126
throw new LocalizedException(__('File is corrupted'));
@@ -129,7 +131,7 @@ public function execute(string $path): FileInterface
129131
'data' => $this->readCompressedImage($resource)
130132
]);
131133

132-
$this->driver->fileClose($resource);
134+
$this->getDriver()->fileClose($resource);
133135

134136
return $this->fileFactory->create([
135137
'path' => $path,
@@ -149,7 +151,7 @@ private function readMarker($resource): string
149151
$data = $this->read($resource, self::TWO_BYTES);
150152

151153
if ($data[0] != self::MARKER_PREFIX) {
152-
$this->driver->fileClose($resource);
154+
$this->getDriver()->fileClose($resource);
153155
throw new LocalizedException(__('File is corrupted'));
154156
}
155157

@@ -168,7 +170,7 @@ private function readCompressedImage($resource): string
168170
$compressedImage = '';
169171
do {
170172
$compressedImage .= $this->read($resource, self::ONE_MEGABYTE);
171-
} while (!$this->driver->endOfFile($resource));
173+
} while (!$this->getDriver()->endOfFile($resource));
172174

173175
$endOfImageMarkerPosition = strpos($compressedImage, self::MARKER_PREFIX . self::MARKER_IMAGE_END);
174176

@@ -209,10 +211,23 @@ private function read($resource, int $length): string
209211
{
210212
$data = '';
211213

212-
while (!$this->driver->endOfFile($resource) && strlen($data) < $length) {
213-
$data .= $this->driver->fileRead($resource, $length - strlen($data));
214+
while (!$this->getDriver()->endOfFile($resource) && strlen($data) < $length) {
215+
$data .= $this->getDriver()->fileRead($resource, $length - strlen($data));
214216
}
215217

216218
return $data;
217219
}
220+
221+
/**
222+
* @return DriverInterface
223+
* @throws FileSystemException
224+
*/
225+
private function getDriver(): DriverInterface
226+
{
227+
if ($this->driver === null) {
228+
$this->driver = $this->filesystem->getDirectoryWrite(DirectoryList::MEDIA)->getDriver();
229+
}
230+
231+
return $this->driver;
232+
}
218233
}

app/code/Magento/MediaGalleryMetadata/Model/Png/ReadFile.php

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
namespace Magento\MediaGalleryMetadata\Model\Png;
99

10+
use Magento\Framework\App\ObjectManager;
1011
use Magento\Framework\Exception\FileSystemException;
1112
use Magento\Framework\Exception\LocalizedException;
1213
use Magento\Framework\App\Filesystem\DirectoryList;
@@ -47,18 +48,21 @@ class ReadFile implements ReadFileInterface
4748
private $fileFactory;
4849

4950
/**
51+
* @param DriverInterface $driver
5052
* @param FileInterfaceFactory $fileFactory
5153
* @param SegmentInterfaceFactory $segmentFactory
5254
* @param Filesystem $filesystem
55+
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
5356
*/
5457
public function __construct(
58+
DriverInterface $driver,
5559
FileInterfaceFactory $fileFactory,
5660
SegmentInterfaceFactory $segmentFactory,
57-
Filesystem $filesystem
61+
Filesystem $filesystem = null
5862
) {
5963
$this->fileFactory = $fileFactory;
6064
$this->segmentFactory = $segmentFactory;
61-
$this->filesystem = $filesystem;
65+
$this->filesystem = $filesystem ?? ObjectManager::getInstance()->get(Filesystem::class);
6266
}
6367

6468
/**

0 commit comments

Comments
 (0)