Skip to content

Commit ace0dd1

Browse files
committed
Unit tests for SecurityGroup, KeyPair
1 parent 6418a00 commit ace0dd1

File tree

10 files changed

+180
-17
lines changed

10 files changed

+180
-17
lines changed

src/Compute/v2/Models/Keypair.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,9 @@ class Keypair extends OperatorResource implements Listable, Retrievable, Deletab
3131
/** @var string */
3232
public $userId;
3333

34+
/** @var string */
35+
public $id;
36+
3437
/** @var \DateTimeImmutable */
3538
public $createdAt;
3639

src/Compute/v2/Service.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,13 @@ public function getFlavor(array $options = []): Flavor
9494
return $flavor;
9595
}
9696

97+
/**
98+
* Create a new flavor resource.
99+
*
100+
* @param array $options {@see \OpenStack\Compute\v2\Api::postFlavor}
101+
*
102+
* @return Flavor
103+
*/
97104
public function createFlavor(array $options = []): Flavor
98105
{
99106
return $this->model(Flavor::class)->create($options);
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
HTTP/1.1 201 Created
2+
Content-Type: application/json
3+
4+
{
5+
"flavor": {
6+
"OS-FLV-DISABLED:disabled": false,
7+
"disk": 80,
8+
"OS-FLV-EXT-DATA:ephemeral": 0,
9+
"os-flavor-access:is_public": true,
10+
"id": "f535aa45-bc38-4818-b9d7-8f91d41e89ed",
11+
"links": [
12+
{
13+
"href": "http://openstack.example.com/v2.1/flavors/f535aa45-bc38-4818-b9d7-8f91d41e89ed",
14+
"rel": "self"
15+
},
16+
{
17+
"href": "http://openstack.example.com/flavors/f535aa45-bc38-4818-b9d7-8f91d41e89ed",
18+
"rel": "bookmark"
19+
}
20+
],
21+
"name": "test_flavor",
22+
"ram": 512,
23+
"swap": "",
24+
"vcpus": 8
25+
}
26+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
HTTP/1.1 200 OK
2+
Content-Type: application/json
3+
4+
{
5+
"keypair": {
6+
"fingerprint": "44:fe:29:6e:23:14:b9:53:5b:65:82:58:1c:fe:5a:c3",
7+
"name": "keypair-test",
8+
"public_key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC1HTrHCbb9NawNLSV8N6tSa8i637+EC2dA+lsdHHfQlT54t+N0nHhJPlKWDLhc579j87vp6RDFriFJ/smsTnDnf64O12z0kBaJpJPH2zXrBkZFK6q2rmxydURzX/z0yLSCP77SFJ0fdXWH2hMsAusflGyryHGX20n+mZK6mDrxVzGxEz228dwQ5G7Az5OoZDWygH2pqPvKjkifRw0jwUKf3BbkP0QvANACOk26cv16mNFpFJfI1N3OC5lUsZQtKGR01ptJoWijYKccqhkAKuo902tg/qup58J5kflNm7I61sy1mJon6SGqNUSfoQagqtBH6vd/tU1jnlwZ03uUroAL",
9+
"user_id": "fake",
10+
"deleted": false,
11+
"created_at": "2014-05-07T12:06:13.681238",
12+
"updated_at": null,
13+
"deleted_at": null,
14+
"id": 1
15+
}
16+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
HTTP/1.1 201 Created
2+
Content-Type: application/json
3+
4+
{
5+
"keypair": {
6+
"fingerprint": "1e:2c:9b:56:79:4b:45:77:f9:ca:7a:98:2c:b0:d5:3c",
7+
"name": "keypair-803a1926-af78-4b05-902a-1d6f7a8d9d3e",
8+
"public_key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDx8nkQv/zgGgB4rMYmIf+6A4l6Rr+o/6lHBQdW5aYd44bd8JttDCE/F/pNRr0lRE+PiqSPO8nDPHw0010JeMH9gYgnnFlyY3/OcJ02RhIPyyxYpv9FhY+2YiUkpwFOcLImyrxEsYXpD/0d3ac30bNH6Sw9JD9UZHYcpSxsIbECHw==",
9+
"user_id": "fake"
10+
}
11+
}

tests/unit/Compute/v2/Models/FlavorTest.php

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

33
namespace OpenStack\Test\Compute\v2\Models;
44

5+
use GuzzleHttp\Psr7\Response;
56
use OpenStack\Compute\v2\Api;
67
use OpenStack\Compute\v2\Models\Flavor;
78
use OpenCloud\Test\TestCase;
@@ -32,4 +33,32 @@ public function test_it_retrieves_details()
3233
$this->assertEquals(1, $this->flavor->vcpus);
3334
$this->assertEquals(1, $this->flavor->disk);
3435
}
36+
37+
public function test_it_creates()
38+
{
39+
$opts = [
40+
'name' => 'test_flavor',
41+
'ram' => 512,
42+
'vcpus' => 8,
43+
'disk' => 80
44+
];
45+
46+
$expectedJson = ['flavor' => [
47+
'name' => $opts['name'],
48+
'ram' => $opts['ram'],
49+
'vcpus' => $opts['vcpus'],
50+
'disk' => $opts['disk'],
51+
]];
52+
53+
$this->setupMock('POST', 'flavors', $expectedJson, [], 'flavor-post');
54+
55+
$this->assertInstanceOf(Flavor::class, $this->flavor->create($opts));
56+
}
57+
58+
public function test_it_deletes()
59+
{
60+
$this->setupMock('DELETE', 'flavors/1', null, [], new Response(204));
61+
62+
$this->flavor->delete();
63+
}
3564
}
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
<?php
2+
3+
namespace OpenStack\Test\Compute\v2\Models;
4+
5+
use GuzzleHttp\Psr7\Response;
6+
use OpenStack\Compute\v2\Api;
7+
use OpenCloud\Test\TestCase;
8+
use OpenStack\Compute\v2\Models\Keypair;
9+
10+
class KeypairTest extends TestCase
11+
{
12+
/**@var Keypair */
13+
private $keypair;
14+
15+
const KEYPAIR_NAME = 'keypair-test';
16+
17+
public function setUp()
18+
{
19+
parent::setUp();
20+
21+
$this->rootFixturesDir = dirname(__DIR__);
22+
23+
$this->keypair = new Keypair($this->client->reveal(), new Api());
24+
$this->keypair->id = 1;
25+
$this->keypair->name = self::KEYPAIR_NAME;
26+
}
27+
28+
public function test_it_creates()
29+
{
30+
$opts = [
31+
'name' => self::KEYPAIR_NAME,
32+
'publicKey' => 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDx8nkQv/zgGgB4rMYmIf+6A4l6Rr+o/6lHBQdW5aYd44bd8JttDCE/F/pNRr0lRE+PiqSPO8nDPHw0010JeMH9gYgnnFlyY3/OcJ02RhIPyyxYpv9FhY+2YiUkpwFOcLImyrxEsYXpD/0d3ac30bNH6Sw9JD9UZHYcpSxsIbECHw=='
33+
];
34+
35+
$expectedJson = \json_encode(['keypair' => [
36+
'name' => $opts['name'],
37+
'public_key' => $opts['publicKey'],
38+
]], JSON_UNESCAPED_SLASHES);
39+
40+
$this->setupMock('POST', 'os-keypairs', $expectedJson, ['Content-Type' => 'application/json'], 'keypair-post');
41+
42+
$this->assertInstanceOf(Keypair::class, $this->keypair->create($opts));
43+
}
44+
45+
public function test_it_retrieves()
46+
{
47+
$this->setupMock('GET', 'os-keypairs/' . self::KEYPAIR_NAME, null, [], 'keypair-get');
48+
49+
$this->keypair->retrieve();
50+
51+
$this->assertEquals('1', $this->keypair->id);
52+
$this->assertEquals('fake', $this->keypair->userId);
53+
$this->assertEquals('44:fe:29:6e:23:14:b9:53:5b:65:82:58:1c:fe:5a:c3', $this->keypair->fingerprint);
54+
$this->assertEquals(self::KEYPAIR_NAME, $this->keypair->name);
55+
$this->assertEquals(
56+
'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC1HTrHCbb9NawNLSV8N6tSa8i637+EC2dA+lsdHHfQlT54t+N0nHhJPlKWDLhc579j87vp6RDFriFJ/smsTnDnf64O12z0kBaJpJPH2zXrBkZFK6q2rmxydURzX/z0yLSCP77SFJ0fdXWH2hMsAusflGyryHGX20n+mZK6mDrxVzGxEz228dwQ5G7Az5OoZDWygH2pqPvKjkifRw0jwUKf3BbkP0QvANACOk26cv16mNFpFJfI1N3OC5lUsZQtKGR01ptJoWijYKccqhkAKuo902tg/qup58J5kflNm7I61sy1mJon6SGqNUSfoQagqtBH6vd/tU1jnlwZ03uUroAL',
57+
$this->keypair->publicKey
58+
);
59+
$this->assertFalse($this->keypair->deleted);
60+
}
61+
62+
public function test_it_deletes()
63+
{
64+
$this->setupMock('DELETE', 'os-keypairs/' . self::KEYPAIR_NAME, null, [], new Response(204));
65+
$this->keypair->delete();
66+
}
67+
}

tests/unit/Networking/v2/Extensions/SecurityGroups/Fixtures/SecurityGroup.resp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@ Content-Type: application/json
33

44
{
55
"security_group":{
6-
"description":"default",
6+
"description":"test_security_group_description",
77
"id":"85cc3048-abc3-43cc-89b3-377341426ac5",
8-
"name":"default",
8+
"name":"test_security_group",
99
"security_group_rules":[
1010
{
1111
"direction":"ingress",

tests/unit/Networking/v2/Extensions/SecurityGroups/Models/SecurityGroupRuleTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,14 @@ public function setUp()
2424

2525
public function test_it_deletes()
2626
{
27-
$this->setupMock('DELETE', '/v2.0/security-group-rules/id', null, [], new Response(202));
27+
$this->setupMock('DELETE', 'v2.0/security-group-rules/id', null, [], new Response(202));
2828

2929
$this->securityGroupRule->delete();
3030
}
3131

3232
public function test_it_retrieves()
3333
{
34-
$this->setupMock('GET', '/v2.0/security-group-rules/id', null, [], 'SecurityGroupRule');
34+
$this->setupMock('GET', 'v2.0/security-group-rules/id', null, [], 'SecurityGroupRule');
3535

3636
$this->securityGroupRule->retrieve();
3737
}

tests/unit/Networking/v2/Extensions/SecurityGroups/Models/SecurityGroupTest.php

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -12,33 +12,40 @@ class SecurityGroupTest extends TestCase
1212
/** @var SecurityGroup */
1313
private $securityGroup;
1414

15+
const SECURITY_GROUP_ID = '85cc3048-abc3-43cc-89b3-377341426ac5';
16+
1517
public function setUp()
1618
{
1719
parent::setUp();
1820

1921
$this->rootFixturesDir = dirname(__DIR__);
2022

2123
$this->securityGroup = new SecurityGroup($this->client->reveal(), new Api());
22-
$this->securityGroup->id = 'id';
24+
$this->securityGroup->id = self::SECURITY_GROUP_ID;
2325
}
2426

2527
public function test_it_deletes()
2628
{
27-
$this->setupMock('DELETE', 'v2.0/security-groups/id', null, [], new Response(202));
29+
$this->setupMock('DELETE', 'v2.0/security-groups/' . self::SECURITY_GROUP_ID , null, [], new Response(202));
2830

2931
$this->securityGroup->delete();
3032
}
3133

3234
public function test_it_retrieves()
3335
{
34-
$this->setupMock('GET', 'v2.0/security-groups/id', null, [], 'SecurityGroup');
36+
$this->setupMock('GET', 'v2.0/security-groups/' . self::SECURITY_GROUP_ID, null, [], 'SecurityGroup');
3537

3638
$this->securityGroup->retrieve();
39+
40+
$this->assertEquals('test_security_group', $this->securityGroup->name);
41+
$this->assertEquals('test_security_group_description', $this->securityGroup->description);
42+
$this->assertEquals(self::SECURITY_GROUP_ID, $this->securityGroup->id);
43+
$this->assertEquals(2, count($this->securityGroup->securityGroupRules));
3744
}
3845

3946
public function test_it_updates()
4047
{
41-
$this->setupMock('PUT', 'v2.0/security-groups/id', null, [], 'SecurityGroup');
48+
$this->setupMock('PUT', 'v2.0/security-groups/' . self::SECURITY_GROUP_ID, null, [], 'SecurityGroup');
4249

4350
$this->securityGroup->update();
4451
}
@@ -50,17 +57,14 @@ public function test_it_creates()
5057
'description' => 'foo',
5158
];
5259

53-
$expectedJson = json_encode(
54-
[
55-
'security_group' => [
56-
'name' => $opts['name'],
57-
'description' => $opts['description'],
58-
],
60+
$expectedJson = [
61+
'security_group' => [
62+
'name' => $opts['name'],
63+
'description' => $opts['description'],
5964
],
60-
JSON_UNESCAPED_SLASHES
61-
);
65+
];
6266

63-
$this->setupMock('POST', 'v2.0/security-groups', $expectedJson, ['Content-Type' => 'application/json'], 'SecurityGroup');
67+
$this->setupMock('POST', 'v2.0/security-groups', $expectedJson, [], 'SecurityGroup');
6468

6569
$this->assertInstanceOf(SecurityGroup::class, $this->securityGroup->create($opts));
6670
}

0 commit comments

Comments
 (0)