package netlink

import (
	"syscall"
	"testing"
)

func TestPayloadRTNETLINK(t *testing.T) {
	t.Parallel()

	checkPayload(t, []payloadTestCase{
		{"RTM_NEWADDR lo", func(c *Conn) {
			(&RouteConn{c}).writeNewaddrLo(1)
		}, []byte{
			/* Len   */ 0x28, 0, 0, 0,
			/* Type  */ 0x14, 0,
			/* Flags */ 5, 6,
			/* Seq   */ 0, 0, 0, 0,
			/* Pid   */ 1, 0, 0, 0,

			/* Family    */ 2,
			/* Prefixlen */ 8,
			/* Flags     */ 0x80,
			/* Scope     */ 0xfe,
			/* Index     */ 1, 0, 0, 0,

			/* Len     */ 8, 0,
			/* Type    */ 2, 0,
			/* in_addr */ 127, 0, 0, 1,

			/* Len     */ 8, 0,
			/* Type    */ 1, 0,
			/* in_addr */ 127, 0, 0, 1,
		}},

		{"RTM_NEWLINK", func(c *Conn) {
			c.seq++
			(&RouteConn{c}).writeIfInfomsg(
				syscall.RTM_NEWLINK, 0,
				&syscall.IfInfomsg{
					Family: syscall.AF_UNSPEC,
					Index:  1,
					Flags:  syscall.IFF_UP,
					Change: syscall.IFF_UP,
				},
			)
		}, []byte{
			/* Len   */ 0x20, 0, 0, 0,
			/* Type  */ 0x10, 0,
			/* Flags */ 5, 0,
			/* Seq   */ 1, 0, 0, 0,
			/* Pid   */ 1, 0, 0, 0,

			/* Family */ 0,
			/* pad    */ 0,
			/* Type   */ 0, 0,
			/* Index  */ 1, 0, 0, 0,
			/* Flags  */ 1, 0, 0, 0,
			/* Change */ 1, 0, 0, 0,
		}},
	})
}
