ResolveAliasesTest.php 3.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. <?php
  2. namespace React\Tests\Dns\Resolver;
  3. use React\Tests\Dns\TestCase;
  4. use React\Dns\Resolver\Resolver;
  5. use React\Dns\Model\Message;
  6. use React\Dns\Model\Record;
  7. class ResolveAliasesTest extends TestCase
  8. {
  9. /**
  10. * @dataProvider provideAliasedAnswers
  11. */
  12. public function testResolveAliases(array $expectedAnswers, array $answers, $name)
  13. {
  14. $message = new Message();
  15. foreach ($answers as $answer) {
  16. $message->answers[] = $answer;
  17. }
  18. $executor = $this->createExecutorMock();
  19. $executor->expects($this->once())->method('query')->willReturn(\React\Promise\resolve($message));
  20. $resolver = new Resolver($executor);
  21. $answers = $resolver->resolveAll($name, Message::TYPE_A);
  22. $answers->then($this->expectCallableOnceWith($expectedAnswers), null);
  23. }
  24. public function provideAliasedAnswers()
  25. {
  26. return array(
  27. array(
  28. array('178.79.169.131'),
  29. array(
  30. new Record('igor.io', Message::TYPE_A, Message::CLASS_IN, 3600, '178.79.169.131'),
  31. ),
  32. 'igor.io',
  33. ),
  34. array(
  35. array('178.79.169.131', '178.79.169.132', '178.79.169.133'),
  36. array(
  37. new Record('igor.io', Message::TYPE_A, Message::CLASS_IN, 3600, '178.79.169.131'),
  38. new Record('igor.io', Message::TYPE_A, Message::CLASS_IN, 3600, '178.79.169.132'),
  39. new Record('igor.io', Message::TYPE_A, Message::CLASS_IN, 3600, '178.79.169.133'),
  40. ),
  41. 'igor.io',
  42. ),
  43. array(
  44. array('178.79.169.131'),
  45. array(
  46. new Record('igor.io', Message::TYPE_A, Message::CLASS_IN, 3600, '178.79.169.131'),
  47. new Record('foo.igor.io', Message::TYPE_A, Message::CLASS_IN, 3600, '178.79.169.131'),
  48. new Record('bar.igor.io', Message::TYPE_A, Message::CLASS_IN, 3600, '178.79.169.131'),
  49. ),
  50. 'igor.io',
  51. ),
  52. array(
  53. array('178.79.169.131'),
  54. array(
  55. new Record('igor.io', Message::TYPE_CNAME, Message::CLASS_IN, 3600, 'foo.igor.io'),
  56. new Record('foo.igor.io', Message::TYPE_A, Message::CLASS_IN, 3600, '178.79.169.131'),
  57. ),
  58. 'igor.io',
  59. ),
  60. array(
  61. array('178.79.169.131'),
  62. array(
  63. new Record('igor.io', Message::TYPE_CNAME, Message::CLASS_IN, 3600, 'foo.igor.io'),
  64. new Record('foo.igor.io', Message::TYPE_CNAME, Message::CLASS_IN, 3600, 'bar.igor.io'),
  65. new Record('bar.igor.io', Message::TYPE_A, Message::CLASS_IN, 3600, '178.79.169.131'),
  66. ),
  67. 'igor.io',
  68. ),
  69. array(
  70. array('178.79.169.131', '178.79.169.132', '178.79.169.133'),
  71. array(
  72. new Record('igor.io', Message::TYPE_CNAME, Message::CLASS_IN, 3600, 'foo.igor.io'),
  73. new Record('foo.igor.io', Message::TYPE_CNAME, Message::CLASS_IN, 3600, 'bar.igor.io'),
  74. new Record('bar.igor.io', Message::TYPE_CNAME, Message::CLASS_IN, 3600, 'baz.igor.io'),
  75. new Record('bar.igor.io', Message::TYPE_CNAME, Message::CLASS_IN, 3600, 'qux.igor.io'),
  76. new Record('baz.igor.io', Message::TYPE_A, Message::CLASS_IN, 3600, '178.79.169.131'),
  77. new Record('baz.igor.io', Message::TYPE_A, Message::CLASS_IN, 3600, '178.79.169.132'),
  78. new Record('qux.igor.io', Message::TYPE_A, Message::CLASS_IN, 3600, '178.79.169.133'),
  79. ),
  80. 'igor.io',
  81. ),
  82. );
  83. }
  84. private function createExecutorMock()
  85. {
  86. return $this->getMockBuilder('React\Dns\Query\ExecutorInterface')->getMock();
  87. }
  88. }