'use strict';

require('../common');
const assert = require('assert');
const dgram = require('dgram');
const multicastAddress = '224.0.0.114';

const setup = dgram.createSocket.bind(dgram, { type: 'udp4', reuseAddr: true });

// addMembership() with valid socket and multicast address should not throw
{
  const socket = setup();
  socket.addMembership(multicastAddress);
  socket.close();
}

// dropMembership() without previous addMembership should throw
{
  const socket = setup();
  assert.throws(
    () => { socket.dropMembership(multicastAddress); },
    /^Error: dropMembership EADDRNOTAVAIL$/
  );
  socket.close();
}

// dropMembership() after addMembership() should not throw
{
  const socket = setup();
  socket.addMembership(multicastAddress);
  socket.dropMembership(multicastAddress);
  socket.close();
}
