PageRenderTime 52ms CodeModel.GetById 26ms RepoModel.GetById 0ms app.codeStats 0ms

/spec/mongo/address/ipv6_spec.rb

http://github.com/mongodb/mongo-ruby-driver
Ruby | 127 lines | 95 code | 32 blank | 0 comment | 0 complexity | 1d36c6c1317dc584e5e19988e5bc2c70 MD5 | raw file
Possible License(s): Apache-2.0
  1. require 'spec_helper'
  2. describe Mongo::Address::IPv6 do
  3. let(:resolver) do
  4. described_class.new(*described_class.parse(address))
  5. end
  6. describe 'self.parse' do
  7. context 'when a port is provided' do
  8. it 'returns the host and port' do
  9. expect(described_class.parse('[::1]:27017')).to eq(['::1', 27017])
  10. end
  11. end
  12. context 'when no port is provided and host is in brackets' do
  13. it 'returns the host and port' do
  14. expect(described_class.parse('[::1]')).to eq(['::1', 27017])
  15. end
  16. end
  17. context 'when no port is provided and host is not in brackets' do
  18. it 'returns the host and port' do
  19. expect(described_class.parse('::1')).to eq(['::1', 27017])
  20. end
  21. end
  22. context 'when invalid address is provided' do
  23. it 'raises ArgumentError' do
  24. expect do
  25. described_class.parse('::1:27017')
  26. end.to raise_error(ArgumentError, 'Invalid IPv6 address: ::1:27017')
  27. end
  28. it 'rejects extra data around the address' do
  29. expect do
  30. described_class.parse('[::1]:27017oh')
  31. end.to raise_error(ArgumentError, 'Invalid IPv6 address: [::1]:27017oh')
  32. end
  33. it 'rejects bogus data in brackets' do
  34. expect do
  35. described_class.parse('[::hello]:27017')
  36. end.to raise_error(ArgumentError, 'Invalid IPv6 address: [::hello]:27017')
  37. end
  38. end
  39. end
  40. describe '#initialize' do
  41. context 'when a port is provided' do
  42. let(:address) do
  43. '[::1]:27017'
  44. end
  45. it 'sets the port' do
  46. expect(resolver.port).to eq(27017)
  47. end
  48. it 'sets the host' do
  49. expect(resolver.host).to eq('::1')
  50. end
  51. end
  52. context 'when no port is provided' do
  53. let(:address) do
  54. '[::1]'
  55. end
  56. it 'sets the port to 27017' do
  57. expect(resolver.port).to eq(27017)
  58. end
  59. it 'sets the host' do
  60. expect(resolver.host).to eq('::1')
  61. end
  62. end
  63. end
  64. describe '#socket' do
  65. let(:address) do
  66. '[::1]'
  67. end
  68. context 'when ssl options are provided' do
  69. let(:socket) do
  70. resolver.socket(5, :ssl => true)
  71. end
  72. it 'returns an ssl socket' do
  73. allow_any_instance_of(Mongo::Socket::SSL).to receive(:connect!)
  74. expect(socket).to be_a(Mongo::Socket::SSL)
  75. end
  76. it 'sets the family as ipv6' do
  77. allow_any_instance_of(Mongo::Socket::SSL).to receive(:connect!)
  78. expect(socket.family).to eq(Socket::PF_INET6)
  79. end
  80. end
  81. context 'when ssl options are not provided' do
  82. let(:socket) do
  83. resolver.socket(5)
  84. end
  85. it 'returns a tcp socket' do
  86. allow_any_instance_of(Mongo::Socket::TCP).to receive(:connect!)
  87. expect(socket).to be_a(Mongo::Socket::TCP)
  88. end
  89. it 'sets the family a ipv6' do
  90. allow_any_instance_of(Mongo::Socket::TCP).to receive(:connect!)
  91. expect(socket.family).to eq(Socket::PF_INET6)
  92. end
  93. end
  94. end
  95. end