11cb0ef41Sopenharmony_ci// Copyright Joyent, Inc. and other Node contributors.
21cb0ef41Sopenharmony_ci//
31cb0ef41Sopenharmony_ci// Permission is hereby granted, free of charge, to any person obtaining a
41cb0ef41Sopenharmony_ci// copy of this software and associated documentation files (the
51cb0ef41Sopenharmony_ci// "Software"), to deal in the Software without restriction, including
61cb0ef41Sopenharmony_ci// without limitation the rights to use, copy, modify, merge, publish,
71cb0ef41Sopenharmony_ci// distribute, sublicense, and/or sell copies of the Software, and to permit
81cb0ef41Sopenharmony_ci// persons to whom the Software is furnished to do so, subject to the
91cb0ef41Sopenharmony_ci// following conditions:
101cb0ef41Sopenharmony_ci//
111cb0ef41Sopenharmony_ci// The above copyright notice and this permission notice shall be included
121cb0ef41Sopenharmony_ci// in all copies or substantial portions of the Software.
131cb0ef41Sopenharmony_ci//
141cb0ef41Sopenharmony_ci// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
151cb0ef41Sopenharmony_ci// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
161cb0ef41Sopenharmony_ci// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
171cb0ef41Sopenharmony_ci// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
181cb0ef41Sopenharmony_ci// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
191cb0ef41Sopenharmony_ci// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
201cb0ef41Sopenharmony_ci// USE OR OTHER DEALINGS IN THE SOFTWARE.
211cb0ef41Sopenharmony_ci
221cb0ef41Sopenharmony_ci'use strict';
231cb0ef41Sopenharmony_ciconst common = require('../common');
241cb0ef41Sopenharmony_ciconst assert = require('assert');
251cb0ef41Sopenharmony_ciconst net = require('net');
261cb0ef41Sopenharmony_ci
271cb0ef41Sopenharmony_ci// Test on IPv4 Server
281cb0ef41Sopenharmony_ci{
291cb0ef41Sopenharmony_ci  const family = 'IPv4';
301cb0ef41Sopenharmony_ci  const server = net.createServer();
311cb0ef41Sopenharmony_ci
321cb0ef41Sopenharmony_ci  server.on('error', common.mustNotCall());
331cb0ef41Sopenharmony_ci
341cb0ef41Sopenharmony_ci  server
351cb0ef41Sopenharmony_ci    .listen(common.PORT + 1, common.localhostIPv4, common.mustCall(() => {
361cb0ef41Sopenharmony_ci      const address4 = server.address();
371cb0ef41Sopenharmony_ci      assert.strictEqual(address4.address, common.localhostIPv4);
381cb0ef41Sopenharmony_ci      assert.strictEqual(address4.port, common.PORT + 1);
391cb0ef41Sopenharmony_ci      assert.strictEqual(address4.family, family);
401cb0ef41Sopenharmony_ci      server.close();
411cb0ef41Sopenharmony_ci    }));
421cb0ef41Sopenharmony_ci}
431cb0ef41Sopenharmony_ci
441cb0ef41Sopenharmony_ciif (!common.hasIPv6) {
451cb0ef41Sopenharmony_ci  common.printSkipMessage('ipv6 part of test, no IPv6 support');
461cb0ef41Sopenharmony_ci  return;
471cb0ef41Sopenharmony_ci}
481cb0ef41Sopenharmony_ci
491cb0ef41Sopenharmony_ciconst family6 = 'IPv6';
501cb0ef41Sopenharmony_ciconst anycast6 = '::';
511cb0ef41Sopenharmony_ci
521cb0ef41Sopenharmony_ci// Test on IPv6 Server
531cb0ef41Sopenharmony_ci{
541cb0ef41Sopenharmony_ci  const localhost = '::1';
551cb0ef41Sopenharmony_ci
561cb0ef41Sopenharmony_ci  const server = net.createServer();
571cb0ef41Sopenharmony_ci
581cb0ef41Sopenharmony_ci  server.on('error', common.mustNotCall());
591cb0ef41Sopenharmony_ci
601cb0ef41Sopenharmony_ci  server.listen(common.PORT + 2, localhost, common.mustCall(() => {
611cb0ef41Sopenharmony_ci    const address = server.address();
621cb0ef41Sopenharmony_ci    assert.strictEqual(address.address, localhost);
631cb0ef41Sopenharmony_ci    assert.strictEqual(address.port, common.PORT + 2);
641cb0ef41Sopenharmony_ci    assert.strictEqual(address.family, family6);
651cb0ef41Sopenharmony_ci    server.close();
661cb0ef41Sopenharmony_ci  }));
671cb0ef41Sopenharmony_ci}
681cb0ef41Sopenharmony_ci
691cb0ef41Sopenharmony_ci// Test without hostname or ip
701cb0ef41Sopenharmony_ci{
711cb0ef41Sopenharmony_ci  const server = net.createServer();
721cb0ef41Sopenharmony_ci
731cb0ef41Sopenharmony_ci  server.on('error', common.mustNotCall());
741cb0ef41Sopenharmony_ci
751cb0ef41Sopenharmony_ci  // Specify the port number
761cb0ef41Sopenharmony_ci  server.listen(common.PORT + 3, common.mustCall(() => {
771cb0ef41Sopenharmony_ci    const address = server.address();
781cb0ef41Sopenharmony_ci    assert.strictEqual(address.address, anycast6);
791cb0ef41Sopenharmony_ci    assert.strictEqual(address.port, common.PORT + 3);
801cb0ef41Sopenharmony_ci    assert.strictEqual(address.family, family6);
811cb0ef41Sopenharmony_ci    server.close();
821cb0ef41Sopenharmony_ci  }));
831cb0ef41Sopenharmony_ci}
841cb0ef41Sopenharmony_ci
851cb0ef41Sopenharmony_ci// Test without hostname or port
861cb0ef41Sopenharmony_ci{
871cb0ef41Sopenharmony_ci  const server = net.createServer();
881cb0ef41Sopenharmony_ci
891cb0ef41Sopenharmony_ci  server.on('error', common.mustNotCall());
901cb0ef41Sopenharmony_ci
911cb0ef41Sopenharmony_ci  // Don't specify the port number
921cb0ef41Sopenharmony_ci  server.listen(common.mustCall(() => {
931cb0ef41Sopenharmony_ci    const address = server.address();
941cb0ef41Sopenharmony_ci    assert.strictEqual(address.address, anycast6);
951cb0ef41Sopenharmony_ci    assert.strictEqual(address.family, family6);
961cb0ef41Sopenharmony_ci    server.close();
971cb0ef41Sopenharmony_ci  }));
981cb0ef41Sopenharmony_ci}
991cb0ef41Sopenharmony_ci
1001cb0ef41Sopenharmony_ci// Test without hostname, but with a false-y port
1011cb0ef41Sopenharmony_ci{
1021cb0ef41Sopenharmony_ci  const server = net.createServer();
1031cb0ef41Sopenharmony_ci
1041cb0ef41Sopenharmony_ci  server.on('error', common.mustNotCall());
1051cb0ef41Sopenharmony_ci
1061cb0ef41Sopenharmony_ci  // Specify a false-y port number
1071cb0ef41Sopenharmony_ci  server.listen(0, common.mustCall(() => {
1081cb0ef41Sopenharmony_ci    const address = server.address();
1091cb0ef41Sopenharmony_ci    assert.strictEqual(address.address, anycast6);
1101cb0ef41Sopenharmony_ci    assert.strictEqual(address.family, family6);
1111cb0ef41Sopenharmony_ci    server.close();
1121cb0ef41Sopenharmony_ci  }));
1131cb0ef41Sopenharmony_ci}
114