// Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package net

import (
	"runtime"
	"testing"
)

func TestMulticastJoinAndLeave(t *testing.T) {
	if runtime.GOOS == "windows" {
		return
	}

	addr := &UDPAddr{
		IP:   IPv4zero,
		Port: 0,
	}
	// open a UDPConn
	conn, err := ListenUDP("udp4", addr)
	if err != nil {
		t.Fatal(err)
	}
	defer conn.Close()

	// try to join group
	mcast := IPv4(224, 0, 0, 254)
	err = conn.JoinGroup(mcast)
	if err != nil {
		t.Fatal(err)
	}

	// try to leave group
	err = conn.LeaveGroup(mcast)
	if err != nil {
		t.Fatal(err)
	}
}

func TestJoinFailureWithIPv6Address(t *testing.T) {
	addr := &UDPAddr{
		IP:   IPv4zero,
		Port: 0,
	}

	// open a UDPConn
	conn, err := ListenUDP("udp4", addr)
	if err != nil {
		t.Fatal(err)
	}
	defer conn.Close()

	// try to join group
	mcast := ParseIP("ff02::1")
	err = conn.JoinGroup(mcast)
	if err == nil {
		t.Fatal("JoinGroup succeeded, should fail")
	}
	t.Logf("%s", err)
}
