// Copyright (c) Tailscale Inc & contributors
// SPDX-License-Identifier: BSD-3-Clause

package netstack

import (
	"net/netip"
	"testing"
)

func TestWindowsPingOutputIsSuccess(t *testing.T) {
	tests := []struct {
		name string
		ip   string
		out  string
		want bool
	}{
		{
			name: "success",
			ip:   "10.0.0.1",
			want: true,
			out: `Pinging 10.0.0.1 with 32 bytes of data:
Reply from 10.0.0.1: bytes=32 time=7ms TTL=64

Ping statistics for 10.0.0.1:
	Packets: Sent = 1, Received = 1, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
	Minimum = 7ms, Maximum = 7ms, Average = 7ms
`,
		},
		{
			name: "success_sub_millisecond",
			ip:   "10.0.0.1",
			want: true,
			out: `Pinging 10.0.0.1 with 32 bytes of data:
Reply from 10.0.0.1: bytes=32 time<1ms TTL=64

Ping statistics for 10.0.0.1:
	Packets: Sent = 1, Received = 1, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
	Minimum = 7ms, Maximum = 7ms, Average = 7ms
`,
		},
		{
			name: "success_german",
			ip:   "10.0.0.1",
			want: true,
			out: `Ping wird ausgeführt für 10.0.0.1 mit 32 Bytes Daten:
Antwort von from 10.0.0.1: Bytes=32 Zeit=7ms TTL=64

Ping-Statistik für 10.0.0.1:
	Pakete: Gesendet = 4, Empfangen = 4, Verloren = 0 (0% Verlust),
Ca. Zeitangaben in Millisek.:
	Minimum = 7ms, Maximum = 7ms, Mittelwert = 7ms
`,
		},
		{
			name: "unreachable",
			ip:   "10.0.0.6",
			want: false,
			out: `Pinging 10.0.0.6 with 32 bytes of data:
Reply from 10.0.108.189: Destination host unreachable

Ping statistics for 10.0.0.6:
	Packets: Sent = 1, Received = 1, Lost = 0 (0% loss),
`,
		},
	}
	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			got := windowsPingOutputIsSuccess(netip.MustParseAddr(tt.ip), []byte(tt.out))
			if got != tt.want {
				t.Errorf("got %v; want %v", got, tt.want)
			}
		})
	}
}
