Skip to content

Commit 610a055

Browse files
committed
SDK-1019: Test coverage for unknown anchors
1 parent 8c47147 commit 610a055

File tree

4 files changed

+82
-50
lines changed

4 files changed

+82
-50
lines changed

src/Yoti/Util/Profile/AnchorConverter.php

Lines changed: 13 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -23,24 +23,28 @@ public static function convert(Anchor $protobufAnchor)
2323
$yotiSignedTimeStamp = self::convertToYotiSignedTimestamp($protobufAnchor);
2424
$X509CertsList = self::convertCertsListToX509($protobufAnchor->getOriginServerCerts());
2525

26-
$anchorValue = '';
27-
$oid = YotiAnchor::TYPE_UNKNOWN_NAME;
28-
2926
foreach ($X509CertsList as $certX509Obj) {
3027
foreach ($certX509Obj->tbsCertificate->extensions as $extObj) {
3128
$anchorType = self::getAnchorTypeByOid($extObj->extnId);
3229
if ($anchorType !== YotiAnchor::TYPE_UNKNOWN_NAME) {
33-
$anchorValue = self::decodeAnchorValue($extObj->extnValue);
34-
$oid = $extObj->extnId;
35-
break;
30+
return [
31+
'oid' => $extObj->extnId,
32+
'yoti_anchor' => new YotiAnchor(
33+
self::decodeAnchorValue($extObj->extnValue),
34+
$anchorType,
35+
$anchorSubType,
36+
$yotiSignedTimeStamp,
37+
$X509CertsList
38+
),
39+
];
3640
}
3741
}
3842
}
3943

4044
return [
41-
'oid' => $oid,
42-
'yoti_anchor' => self::createYotiAnchor(
43-
$anchorValue,
45+
'oid' => YotiAnchor::TYPE_UNKNOWN_NAME,
46+
'yoti_anchor' => new YotiAnchor(
47+
'',
4448
$anchorType,
4549
$anchorSubType,
4650
$yotiSignedTimeStamp,
@@ -49,26 +53,6 @@ public static function convert(Anchor $protobufAnchor)
4953
];
5054
}
5155

52-
/**
53-
* @param string $value
54-
* @param string $type
55-
* @param string $subType
56-
* @param \Yoti\Entity\SignedTimestamp $signedTimestamp
57-
* @param array $X509CertsList
58-
*
59-
* @return YotiAnchor
60-
*/
61-
private static function createYotiAnchor($value, $type, $subType, $signedTimestamp, $X509CertsList)
62-
{
63-
return new YotiAnchor(
64-
$value,
65-
$type,
66-
$subType,
67-
$signedTimestamp,
68-
$X509CertsList
69-
);
70-
}
71-
7256
/**
7357
* @param $extEncodedValue
7458
*
@@ -165,19 +149,6 @@ private static function getAnchorTypeByOid($oid)
165149
return isset($anchorTypesMap[$oid]) ? $anchorTypesMap[$oid] : YotiAnchor::TYPE_UNKNOWN_NAME;
166150
}
167151

168-
/**
169-
* Get anchor type key by type.
170-
*
171-
* @param string $type
172-
*
173-
* @return string
174-
*/
175-
private static function getAnchorTypeKey($type)
176-
{
177-
$anchorTypesMap = array_flip(self::getAnchorTypesMap());
178-
return !empty($anchorTypesMap[$type]) ? $anchorTypesMap[$type] : YotiAnchor::TYPE_UNKNOWN_NAME;
179-
}
180-
181152
/**
182153
* @return array
183154
*/

tests/Util/Profile/AnchorConverterTest.php

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
class AnchorConverterTest extends TestCase
1313
{
1414
/**
15-
* @covers ::convertAnchor
15+
* @covers ::convert
1616
*/
1717
public function testConvertingSourceAnchor()
1818
{
@@ -31,7 +31,7 @@ public function testConvertingSourceAnchor()
3131
}
3232

3333
/**
34-
* @covers ::convertAnchor
34+
* @covers ::convert
3535
*/
3636
public function testConvertingVerifierAnchor()
3737
{
@@ -52,13 +52,20 @@ public function testConvertingVerifierAnchor()
5252
/**
5353
* @covers ::convert
5454
*/
55-
public function testConvert()
55+
public function testConvertingUnknownAnchor()
5656
{
57-
$anchor = new \Attrpubapi\Anchor();
58-
$anchor->mergeFromString(base64_decode(TestAnchors::SOURCE_PP_ANCHOR));
59-
$anchorMap = AnchorConverter::convert($anchor);
60-
$this->assertEquals(Anchor::TYPE_SOURCE_OID, $anchorMap['oid']);
61-
$this->assertEquals('PASSPORT', $anchorMap['yoti_anchor']->getValue());
57+
$anchor = $this->parseFromBase64String(TestAnchors::UNKNOWN_ANCHOR);
58+
59+
$this->assertEquals('UNKNOWN', $anchor->getType());
60+
$this->assertEquals('TEST UNKNOWN SUB TYPE', $anchor->getSubtype());
61+
$this->assertEquals(
62+
'2018-04-12 13:14:32.835537',
63+
$anchor->getSignedTimestamp()->getTimestamp()->format('Y-m-d H:i:s.u')
64+
);
65+
$this->assertEquals('', $anchor->getValue());
66+
67+
$this->assertSerialNumber($anchor, '277870515583559162487099305254898397834');
68+
$this->assertIssuer($anchor, 'id-at-commonName', 'passport-registration-server');
6269
}
6370

6471
/**

tests/Util/Profile/AnchorListConverterTest.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ public function testConvertingAnyAnchor()
3737
$anchorsData = AnchorListConverter::convert(new ArrayObject([
3838
$this->parseFromBase64String(TestAnchors::SOURCE_DL_ANCHOR),
3939
$this->parseFromBase64String(TestAnchors::VERIFIER_YOTI_ADMIN_ANCHOR),
40+
$this->parseFromBase64String(TestAnchors::UNKNOWN_ANCHOR),
4041
]));
4142

4243
$anchorSource = $anchorsData[Anchor::TYPE_SOURCE_OID][0];
@@ -46,6 +47,10 @@ public function testConvertingAnyAnchor()
4647
$anchorVerifier = $anchorsData[Anchor::TYPE_VERIFIER_OID][0];
4748
$this->assertEquals('Verifier', $anchorVerifier->getType());
4849
$this->assertEquals('YOTI_ADMIN', $anchorVerifier->getValue());
50+
51+
$anchorUnknown = $anchorsData[Anchor::TYPE_UNKNOWN_NAME][0];
52+
$this->assertEquals('UNKNOWN', $anchorUnknown->getType());
53+
$this->assertEquals('', $anchorUnknown->getValue());
4954
}
5055

5156
/**

tests/Util/Profile/TestAnchors.php

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,4 +123,53 @@ class TestAnchors
123123
. "b185Qe6PWL4Jl+DvbzN2C0wsUFKRQyRwgBEIaQ8PyYstoCGhyG6joGfHdvA8tGS+Ol98"
124124
. "igUHdLW56nhnGLovTMIhz+RsUWrtszSjWSim2/4vJAE8QjXJ98ou4AVzKUOg9EUklWSU"
125125
. "5HX0xJQ0VOQ0U=";
126+
127+
const UNKNOWN_ANCHOR = "CjdBTkMtRE9D5oQ/YdIfjbvf1HL/HT7s/Xgse6TlNthXYyfF9knv02vq6Vxd5RafiJb"
128+
. "R9xVVl+knEsILLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tDQpNSUlFQkRDQ0FteWd"
129+
. "Bd0lCQWdJUkFORUw2aWRSMGhjZXZRcjR0bUlJY29vd0RRWUpLb1pJaHZjTkFRRUxCUUF"
130+
. "3DQpKekVsTUNNR0ExVUVBeE1jY0dGemMzQnZjblF0Y21WbmFYTjBjbUYwYVc5dUxYTmx"
131+
. "jblpsY2pBZUZ3MHhPREEwDQpNRFV4TkRNMU1ERmFGdzB4T0RBME1USXhORE0xTURGYU1"
132+
. "DY3hKVEFqQmdOVkJBTVRISEJoYzNOd2IzSjBMWEpsDQpaMmx6ZEhKaGRHbHZiaTF6Wlh"
133+
. "KMlpYSXdnZ0dpTUEwR0NTcUdTSWIzRFFFQkFRVUFBNElCandBd2dnR0tBb0lCDQpnUUM"
134+
. "5cThaSnhhT29lRFM1YW5HaFZoUTZZMEdlNDdKdjBwbVhvYUkrck5vTzZ6a0VybUp5TDJ"
135+
. "zTE5KUlJySDIrDQphcVRLWHduakNGMTBFQmxkLzByeW9PSTFaaW42VWZ1RUlpM3VDWEF"
136+
. "Wa3RiOHFrcFgrSkpIKzZGUlowUXp0TlV5DQpiZldOMk0xQlAzUDFQM2k3ak81Vmg3QnN"
137+
. "RRzdXRUI4aGhuNmdBR1AvYVdhQms3OWk2T20yL202cXBQQ0hNOXdTDQpETStMK2JwSmR"
138+
. "yd1JnWkVkSHp5T3BNS3hVd3BJZTBEMGo2TTllKzhnU1ZuSzQwYVJsSVhkalRybWdnbmN"
139+
. "EY2Q5DQpDTVJOMW9JRko5WURMRlJVWUtGcDVIamdmaXYyazB1SWR5SkRPeDY1VlJWUk9"
140+
. "4cGZaamgyamdMY2hyNEZCWS9XDQpDUDhBQThHL3VzUzlFaXdSUXhaOCtiZi80bmFKWFZ"
141+
. "GTVJXZE5MUk5YM2c3cE5aa21MRnQ2cHJ3T0NjOVBpakxJDQpLbEtYM3V2akpnQW0zL2c"
142+
. "yOFZPTjBnOXlzOGM0TFZMQlVnOXRZdld0SmcyK3lOV0c3c1JyMlUwbW9oVGlZV1VuDQp"
143+
. "mNGduaHZzeFROVlRXdk9ZNEZsdFpuSk9MbEtvYVNUeWZUSWpJR0F2RkI4UDNzM2xaRFh"
144+
. "6UkczUUN0SW5Va0FTDQpnT1VDQXdFQUFhTXJNQ2t3RGdZRFZSMFBBUUgvQkFRREFnT1l"
145+
. "NQmNHQnlvREJBWUhDQWtFRERBS2dBaFFRVk5UDQpVRTlTVkRBTkJna3Foa2lHOXcwQkF"
146+
. "Rc0ZBQU9DQVlFQVQ5cFVSdk1vdU1PakNEcE50RjYxZWk2Wlp0NnFFdmpMDQpXdVFYUG8"
147+
. "2S0RoTzYxcElzUjBoK3JNNDBGcjF0K0tad2x4WEtyazlVQkorVTIvdnZRTVl6QUxtbyt"
148+
. "QcThWTXBhDQpPQXludDcrM3VJK2U0eUp6c3VVZ1JVNjFsTDU1QUVKaDBGL0FMYWRqK0J"
149+
. "PcE5vTmwwZVlyZEEvSXZKU054QTJtDQpXdUIycXlUbU42UkRlVmlkdGhUTktiMTB0Q1B"
150+
. "HUndDMEtyUlIzcDh6OFlhUU1mdkFINVlmSHFBTUNWUGNxRTh2DQpLbVNEUzBZano4U1B"
151+
. "UVVUydDlvM3NzcFpiRjlVWmZBMk5MOGVrOG04QUtOSHZDbnBxd2tTczc2TlFpMHE5bnZ"
152+
. "2DQpZRFFCU0k1SXFPQlFuYzNLdGh6T2JGMnpnZ1R0dWV4NTJRZXlCRnowOE1tdG9ZY3F"
153+
. "1RmZJTjluT0EvTW5qTkRXDQpKQmZIZytKeEhzT2JzM0o0RFhONmtWYlpyTkVXK0czZUI"
154+
. "3UnNwUXo3OEs1SDBaWDBjNkt0ZGRJUUJSTy8vOUxrDQp6ZEVRd2tsdXkxM2UxVTlIanl"
155+
. "DbHdwWmVwUStKeUQ0VHdrc0xFcTlmRDVIVTRyM0txVmJwdWRCOVJLOGpaSnA5DQppU0x"
156+
. "GN0llZWFUdVEvMndDUzlLTGIyZ2Z5ZlZnZmlFLw0KLS0tLS1FTkQgQ0VSVElGSUNBVEU"
157+
. "tLS0tLRqFAwgBEoADAdw/1ZI5sbf+2H/tvyEVNmsAjmFHafiKhG2e7c6TmISEXfFTJTi"
158+
. "69lT/DBgSHlhxzwpBl3Mc7MEqobd4SX5PBbRzqaGdiWt00C2T359hH0+tHUvxwRq3lTp"
159+
. "WoLQ9rsZD0m8fHUYrtv4hrQeipeq7uVoUNmc0vo/Yp6+6lkRECGss3k8/J4rXwrhciBY"
160+
. "EuKqhChkXZwbKVU83IbioVRBnbesvNoE0Wwgbcx7+1VAVaDC6zmZ/cmUMdwdsIkT4MXV"
161+
. "5FqTlqVc7kRhiLf/iNPEr806mYvR3z26JO8VIjPKKvgoWYucH5g5GFYukpJaG+O3s9wg"
162+
. "armkrhcsx74gitTMgjRYiWSQQ02wpUnj6WWPQ5Zsm6RTcdt9Q3oHxdzWm5DCeMXuS+r0"
163+
. "RgGpz4p749uuIGvzs6gJAiR4ye3o22gU/SE6+sGjtc2i0ddjqRjxgmxsSNL9dIy07kDq"
164+
. "Z/mK5P4TCxhUPmOYxjhfndl1dBCQleEV0PpMmXXUaKVlCVA+/62PMIhVURVNUIFVOS05"
165+
. "PV04gU1VCIFRZUEUqhQMIARKAA5Q1xoxg3Fq34i3km+zKiU4tpaAcxB//fcRjcXVOvSa"
166+
. "JvWvLMMcBkPlny5+lM3fTb8uzs6RMNEWrb+GD3gVbnrzx5Bbc2f/lJlU0EGs0ZsBzSuW"
167+
. "sr0qPiYd/oMtXu2Iz3oR8t7C5whUZX9rBlayrm+AceLFJOLdTkVFx8qwJe10brMqoE/1"
168+
. "OU4403SILzIkw+nsOKAmjFlymhRZwwDEmBFBf+v8vyDLDeVM8EtmtTLM/FHpgCPsNBL+"
169+
. "9UnwHSC+np4kIS3sJMNXHuoS0uxpi/XgFlZSWjPnR8UKzw1iXzA7Dz18Msfv+aHHUF/E"
170+
. "tML3SJwDv52ewP6cv6N9pd5XtxJB9D4nB959t7oNTltQKGoIy5wCNOITVo7CzXX7IBwE"
171+
. "3Lzp+uvJuetEkEVgjGmUD6PTSK0P4yL56cWwW30jUHXNTkN64ryHhwKvHdvzT+xp/syn"
172+
. "MnLnPO8X6+BV6sqm7GF+OL4PGE3XO3nZCIPwZ0dgxz6r6BtkfV7pBWIlPPa/2LTJHCAE"
173+
. "Q0bvEyui02gIaHFIc8RKJ4U36MiJqXMjQlWXbhVu/URDuYOFXITEiHNs5UaZ0Q8FPlpg"
174+
. "ca5LurwwVkP/EqVsqzc1tuK06AA==";
126175
}

0 commit comments

Comments
 (0)