Skip to content

Commit 7904cdd

Browse files
committed
B2B-2037: [AWS S3] [Integration Tests]: Investigate Test Failures in MediaGallerySynchronization & MediaGallerySynchronizationMetadata modules
1 parent fecbe46 commit 7904cdd

File tree

12 files changed

+361
-85
lines changed

12 files changed

+361
-85
lines changed

app/code/Magento/MediaGalleryMetadata/Model/AddIptcMetadata.php

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

88
namespace Magento\MediaGalleryMetadata\Model;
99

10+
use Magento\Framework\App\Filesystem\DirectoryList;
11+
use Magento\Framework\App\ObjectManager;
1012
use Magento\Framework\Exception\LocalizedException;
13+
use Magento\Framework\Filesystem;
1114
use Magento\Framework\Filesystem\DriverInterface;
1215
use Magento\MediaGalleryMetadata\Model\Jpeg\ReadFile;
1316
use Magento\MediaGalleryMetadataApi\Api\Data\MetadataInterface;
@@ -39,19 +42,29 @@ class AddIptcMetadata
3942
*/
4043
private $fileFactory;
4144

45+
/**
46+
* @var IptcEmbed
47+
*/
48+
private $iptcEmbed;
49+
4250
/**
4351
* @param FileInterfaceFactory $fileFactory
4452
* @param DriverInterface $driver
4553
* @param ReadFile $fileReader
54+
* @param Filesystem|null $filesystem
4655
*/
4756
public function __construct(
4857
FileInterfaceFactory $fileFactory,
4958
DriverInterface $driver,
50-
ReadFile $fileReader
59+
ReadFile $fileReader,
60+
Filesystem $filesystem = null,
61+
IptcEmbed $iptcEmbed = null
5162
) {
5263
$this->fileFactory = $fileFactory;
53-
$this->driver = $driver;
5464
$this->fileReader = $fileReader;
65+
$filesystem = $filesystem ?? ObjectManager::getInstance()->get(Filesystem::class);
66+
$this->driver = $filesystem->getDirectoryWrite(DirectoryList::MEDIA)->getDriver();
67+
$this->iptcEmbed = $iptcEmbed ?? ObjectManager::getInstance()->get(IptcEmbed::class);
5568
}
5669

5770
/**
@@ -89,7 +102,7 @@ public function execute(FileInterface $file, MetadataInterface $metadata, ?Segme
89102
}
90103
}
91104

92-
$this->writeFile($file->getPath(), iptcembed($newData, $file->getPath()));
105+
$this->writeFile($file->getPath(), $this->iptcEmbed->get($newData, $file->getPath()));
93106

94107
$fileWithIptc = $this->fileReader->execute($file->getPath());
95108

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

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

88
namespace Magento\MediaGalleryMetadata\Model\Gif;
99

10+
use Magento\Framework\App\Filesystem\DirectoryList;
11+
use Magento\Framework\App\ObjectManager;
1012
use Magento\Framework\Exception\FileSystemException;
1113
use Magento\Framework\Exception\LocalizedException;
14+
use Magento\Framework\Filesystem;
1215
use Magento\Framework\Filesystem\DriverInterface;
1316
use Magento\MediaGalleryMetadata\Model\SegmentNames;
1417
use Magento\MediaGalleryMetadataApi\Model\FileInterface;
@@ -30,16 +33,24 @@ class WriteFile implements WriteFileInterface
3033
*/
3134
private $segmentNames;
3235

36+
/**
37+
* @var Filesystem
38+
*/
39+
private $filesystem;
40+
3341
/**
3442
* @param DriverInterface $driver
3543
* @param SegmentNames $segmentNames
44+
* @param Filesystem $filesystem
45+
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
3646
*/
3747
public function __construct(
3848
DriverInterface $driver,
39-
SegmentNames $segmentNames
49+
SegmentNames $segmentNames,
50+
Filesystem $filesystem
4051
) {
41-
$this->driver = $driver;
4252
$this->segmentNames = $segmentNames;
53+
$this->filesystem = $filesystem ?? ObjectManager::getInstance()->get(Filesystem::class);
4354
}
4455

4556
/**
@@ -51,10 +62,10 @@ public function __construct(
5162
*/
5263
public function execute(FileInterface $file): void
5364
{
54-
$resource = $this->driver->fileOpen($file->getPath(), 'wb');
65+
$resource = $this->getDriver()->fileOpen($file->getPath(), 'wb');
5566

5667
$this->writeSegments($resource, $file->getSegments());
57-
$this->driver->fileClose($resource);
68+
$this->getDriver()->fileClose($resource);
5869
}
5970

6071
/**
@@ -66,11 +77,24 @@ public function execute(FileInterface $file): void
6677
private function writeSegments($resource, array $segments): void
6778
{
6879
foreach ($segments as $segment) {
69-
$this->driver->fileWrite(
80+
$this->getDriver()->fileWrite(
7081
$resource,
7182
$segment->getData()
7283
);
7384
}
74-
$this->driver->fileWrite($resource, pack("C", ord(";")));
85+
$this->getDriver()->fileWrite($resource, pack("C", ord(";")));
86+
}
87+
88+
/**
89+
* @return DriverInterface
90+
* @throws FileSystemException
91+
*/
92+
private function getDriver(): DriverInterface
93+
{
94+
if ($this->driver === null) {
95+
$this->driver = $this->filesystem->getDirectoryWrite(DirectoryList::MEDIA)->getDriver();
96+
}
97+
98+
return $this->driver;
7599
}
76100
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
namespace Magento\MediaGalleryMetadata\Model;
9+
10+
use Magento\Framework\Exception\LocalizedException;
11+
12+
/**
13+
* Wrapper for native iptcembed function
14+
*/
15+
class IptcEmbed
16+
{
17+
/**
18+
* Returns result of iptcembed function
19+
*
20+
* @throws LocalizedException if iptcembed function is not enabled
21+
*/
22+
public function get(string $iptcData, string $filePath)
23+
{
24+
if (!is_callable('iptcembed')) {
25+
throw new LocalizedException(__('iptcembed() must be enabled in php configuration'));
26+
}
27+
28+
return iptcembed($iptcData, $filePath);
29+
}
30+
}

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

Lines changed: 33 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,11 @@
77

88
namespace Magento\MediaGalleryMetadata\Model\Jpeg;
99

10+
use Magento\Framework\App\Filesystem\DirectoryList;
11+
use Magento\Framework\App\ObjectManager;
1012
use Magento\Framework\Exception\FileSystemException;
1113
use Magento\Framework\Exception\LocalizedException;
14+
use Magento\Framework\Filesystem;
1215
use Magento\Framework\Filesystem\DriverInterface;
1316
use Magento\MediaGalleryMetadata\Model\SegmentNames;
1417
use Magento\MediaGalleryMetadataApi\Model\FileInterface;
@@ -34,16 +37,24 @@ class WriteFile implements WriteFileInterface
3437
*/
3538
private $segmentNames;
3639

40+
/**
41+
* @var Filesystem
42+
*/
43+
private $filesystem;
44+
3745
/**
3846
* @param DriverInterface $driver
3947
* @param SegmentNames $segmentNames
48+
* @param Filesystem $filesystem
49+
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
4050
*/
4151
public function __construct(
4252
DriverInterface $driver,
43-
SegmentNames $segmentNames
53+
SegmentNames $segmentNames,
54+
Filesystem $filesystem
4455
) {
45-
$this->driver = $driver;
4656
$this->segmentNames = $segmentNames;
57+
$this->filesystem = $filesystem ?? ObjectManager::getInstance()->get(Filesystem::class);
4758
}
4859

4960
/**
@@ -61,12 +72,12 @@ public function execute(FileInterface $file): void
6172
}
6273
}
6374

64-
$resource = $this->driver->fileOpen($file->getPath(), 'wb');
75+
$resource = $this->getDriver()->fileOpen($file->getPath(), 'wb');
6576

66-
$this->driver->fileWrite($resource, self::MARKER_IMAGE_PREFIX . self::MARKER_IMAGE_FILE_START);
77+
$this->getDriver()->fileWrite($resource, self::MARKER_IMAGE_PREFIX . self::MARKER_IMAGE_FILE_START);
6778
$this->writeSegments($resource, $file->getSegments());
68-
$this->driver->fileWrite($resource, self::MARKER_IMAGE_PREFIX . self::MARKER_IMAGE_END);
69-
$this->driver->fileClose($resource);
79+
$this->getDriver()->fileWrite($resource, self::MARKER_IMAGE_PREFIX . self::MARKER_IMAGE_END);
80+
$this->getDriver()->fileClose($resource);
7081
}
7182

7283
/**
@@ -79,14 +90,27 @@ private function writeSegments($resource, array $segments): void
7990
{
8091
foreach ($segments as $segment) {
8192
if ($segment->getName() !== 'CompressedImage') {
82-
$this->driver->fileWrite(
93+
$this->getDriver()->fileWrite(
8394
$resource,
8495
//phpcs:ignore Magento2.Functions.DiscouragedFunction
8596
self::MARKER_IMAGE_PREFIX . chr($this->segmentNames->getSegmentType($segment->getName()))
8697
);
87-
$this->driver->fileWrite($resource, pack("n", strlen($segment->getData()) + 2));
98+
$this->getDriver()->fileWrite($resource, pack("n", strlen($segment->getData()) + 2));
8899
}
89-
$this->driver->fileWrite($resource, $segment->getData());
100+
$this->getDriver()->fileWrite($resource, $segment->getData());
90101
}
91102
}
103+
104+
/**
105+
* @return DriverInterface
106+
* @throws FileSystemException
107+
*/
108+
private function getDriver(): DriverInterface
109+
{
110+
if ($this->driver === null) {
111+
$this->driver = $this->filesystem->getDirectoryWrite(DirectoryList::MEDIA)->getDriver();
112+
}
113+
114+
return $this->driver;
115+
}
92116
}

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

Lines changed: 33 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,11 @@
77

88
namespace Magento\MediaGalleryMetadata\Model\Png;
99

10+
use Magento\Framework\App\Filesystem\DirectoryList;
11+
use Magento\Framework\App\ObjectManager;
1012
use Magento\Framework\Exception\FileSystemException;
1113
use Magento\Framework\Exception\LocalizedException;
14+
use Magento\Framework\Filesystem;
1215
use Magento\Framework\Filesystem\DriverInterface;
1316
use Magento\MediaGalleryMetadata\Model\SegmentNames;
1417
use Magento\MediaGalleryMetadataApi\Model\FileInterface;
@@ -32,16 +35,24 @@ class WriteFile implements WriteFileInterface
3235
*/
3336
private $segmentNames;
3437

38+
/**
39+
* @var Filesystem
40+
*/
41+
private $filesystem;
42+
3543
/**
3644
* @param DriverInterface $driver
3745
* @param SegmentNames $segmentNames
46+
* @param Filesystem $filesystem
47+
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
3848
*/
3949
public function __construct(
4050
DriverInterface $driver,
41-
SegmentNames $segmentNames
51+
SegmentNames $segmentNames,
52+
Filesystem $filesystem
4253
) {
43-
$this->driver = $driver;
4454
$this->segmentNames = $segmentNames;
55+
$this->filesystem = $filesystem ?? ObjectManager::getInstance()->get(Filesystem::class);
4556
}
4657

4758
/**
@@ -53,11 +64,11 @@ public function __construct(
5364
*/
5465
public function execute(FileInterface $file): void
5566
{
56-
$resource = $this->driver->fileOpen($file->getPath(), 'wb');
67+
$resource = $this->getDriver()->fileOpen($file->getPath(), 'wb');
5768

58-
$this->driver->fileWrite($resource, self::PNG_FILE_START);
69+
$this->getDriver()->fileWrite($resource, self::PNG_FILE_START);
5970
$this->writeSegments($resource, $file->getSegments());
60-
$this->driver->fileClose($resource);
71+
$this->getDriver()->fileClose($resource);
6172
}
6273

6374
/**
@@ -69,10 +80,23 @@ public function execute(FileInterface $file): void
6980
private function writeSegments($resource, array $segments): void
7081
{
7182
foreach ($segments as $segment) {
72-
$this->driver->fileWrite($resource, pack("N", strlen($segment->getData())));
73-
$this->driver->fileWrite($resource, pack("a4", $segment->getName()));
74-
$this->driver->fileWrite($resource, $segment->getData());
75-
$this->driver->fileWrite($resource, pack("N", crc32($segment->getName() . $segment->getData())));
83+
$this->getDriver()->fileWrite($resource, pack("N", strlen($segment->getData())));
84+
$this->getDriver()->fileWrite($resource, pack("a4", $segment->getName()));
85+
$this->getDriver()->fileWrite($resource, $segment->getData());
86+
$this->getDriver()->fileWrite($resource, pack("N", crc32($segment->getName() . $segment->getData())));
7687
}
7788
}
89+
90+
/**
91+
* @return DriverInterface
92+
* @throws FileSystemException
93+
*/
94+
private function getDriver(): DriverInterface
95+
{
96+
if ($this->driver === null) {
97+
$this->driver = $this->filesystem->getDirectoryWrite(DirectoryList::MEDIA)->getDriver();
98+
}
99+
100+
return $this->driver;
101+
}
78102
}

0 commit comments

Comments
 (0)