summaryrefslogtreecommitdiff
path: root/server/vendor/php-opencloud/common/tests/integration/SampleManager.php
blob: 4bd8b9aea688f7a2f5ec94590fefc3f8981dc4ff (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
<?php

namespace OpenCloud\integration;

class SampleManager implements SampleManagerInterface
{
    protected $basePath;
    protected $paths = [];
    protected $verbosity;

    public function __construct($basePath, $verbosity)
    {
        $this->basePath = $basePath;
        $this->verbosity = $verbosity;
    }

    public function deletePaths()
    {
        if (!empty($this->paths)) {
            foreach ($this->paths as $path) {
                unlink($path);
            }
        }
    }

    protected function getGlobalReplacements()
    {
        return [
            '{userId}'      => getenv('OS_USER_ID'),
            '{username}'    => getenv('OS_USERNAME'),
            '{password}'    => getenv('OS_PASSWORD'),
            '{domainId}'    => getenv('OS_DOMAIN_ID'),
            '{authUrl}'     => getenv('OS_AUTH_URL'),
            '{tenantId}'    => getenv('OS_TENANT_ID'),
            '{region}'      => getenv('OS_REGION'),
            '{projectId}'   => getenv('OS_PROJECT_ID'),
            '{projectName}' => getenv('OS_PROJECT_NAME'),
        ];
    }

    protected function getConnectionTemplate()
    {
        if ($this->verbosity === 1) {
            $subst = <<<'EOL'
use OpenCloud\Integration\DefaultLogger;
use OpenCloud\Integration\Utils;
use GuzzleHttp\MessageFormatter;

$options = [
    'debugLog'         => true,
    'logger'           => new DefaultLogger(),
    'messageFormatter' => new MessageFormatter(),
];
$openstack = new OpenCloud\OpenCloud(Utils::getAuthOpts($options));
EOL;
        } elseif ($this->verbosity === 2) {
            $subst = <<<'EOL'
use OpenCloud\Integration\DefaultLogger;
use OpenCloud\Integration\Utils;
use GuzzleHttp\MessageFormatter;

$options = [
    'debugLog'         => true,
    'logger'           => new DefaultLogger(),
    'messageFormatter' => new MessageFormatter(MessageFormatter::DEBUG),
];
$openstack = new OpenCloud\OpenCloud(Utils::getAuthOpts($options));
EOL;
        } else {
            $subst = <<<'EOL'
use OpenCloud\Integration\Utils;

$openstack = new OpenCloud\OpenCloud(Utils::getAuthOpts());
EOL;
        }

        return $subst;
    }

    public function write($path, array $replacements)
    {
        $replacements = array_merge($this->getGlobalReplacements(), $replacements);

        $sampleFile = rtrim($this->basePath, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR . $path;

        if (!file_exists($sampleFile) || !is_readable($sampleFile)) {
            throw new \RuntimeException(sprintf("%s either does not exist or is not readable", $sampleFile));
        }

        $content = strtr(file_get_contents($sampleFile), $replacements);
        $content = str_replace("'vendor/'", "'" . dirname(dirname(__DIR__)) . DIRECTORY_SEPARATOR . "vendor'", $content);

        $subst = $this->getConnectionTemplate();
        $content = preg_replace('/\([^)]+\)/', '', $content, 1);
        $content = str_replace('$openstack = new OpenCloud\OpenCloud;', $subst, $content);

        $tmp = tempnam(sys_get_temp_dir(), 'openstack');
        file_put_contents($tmp, $content);

        $this->paths[] = $tmp;

        return $tmp;
    }
}