package jsonio

import (
	"bytes"
	"encoding/json"
	"testing"

	"github.com/stretchr/testify/assert"
	"github.com/stretchr/testify/require"

	"go.skia.org/infra/go/testutils/unittest"
	"go.skia.org/infra/golden/go/types"
)

func TestValidate_InvalidData_ReturnsError(t *testing.T) {
	unittest.SmallTest(t)

	test := func(name string, toValidate GoldResults, errFragment string) {
		t.Run(name, func(t *testing.T) {
			err := toValidate.Validate()
			require.Error(t, err)
			assert.Contains(t, err.Error(), errFragment)
		})
	}

	test("empty", GoldResults{}, `"gitHash", "commit_id", or "change_list_id" must be set`)
	test("invalidHash", GoldResults{
		GitHash: "whoops this isn't hexadecimal",
		Key:     map[string]string{"param1": "value1"},
	}, `must be hexadecimal`)
	test("missingKey", GoldResults{
		GitHash: "aaa27ef254ad66609606c7af0730ee062b25edf9",
	}, `field "key" must not be empty`)
	test("emptyKeyResults", GoldResults{
		GitHash: "aaa27ef254ad66609606c7af0730ee062b25edf9",
		Key:     map[string]string{"param1": "value1"},
		Results: []Result{
			{
				Key:    map[string]string{},
				Digest: "12345abc",
			},
		},
	}, `results" index 0: field "key" must not be empty`)
	test("emptyKeyValue", GoldResults{
		GitHash: "aaa27ef254ad66609606c7af0730ee062b25edf9",
		Key:     map[string]string{"param1": ""},
		Results: []Result{
			{
				Key: map[string]string{
					types.PrimaryKeyField: "foo",
					types.CorpusField:     "my corpus",
				},
				Digest: "12345abc",
			},
		},
	}, `field "key" must not have empty keys`)
	test("noNameField", GoldResults{
		GitHash: "aaa27ef254ad66609606c7af0730ee062b25edf9",
		Key:     map[string]string{"param1": "value1"},
		Results: []Result{
			{
				Key: map[string]string{
					"no_name": "bar",
				},
				Digest: "12345abc",
			},
		},
	}, `field "key" is missing key name`)
	test("noCorpusField", GoldResults{
		GitHash: "aaa27ef254ad66609606c7af0730ee062b25edf9",
		Key:     map[string]string{"param1": "value1"},
		Results: []Result{
			{
				Key: map[string]string{
					types.PrimaryKeyField: "bar",
				},
				Digest: "12345abc",
			},
		},
	}, `field "key" is missing key source_type`)
	test("missingDigest", GoldResults{
		GitHash: "aaa27ef254ad66609606c7af0730ee062b25edf9",
		Key:     map[string]string{"param1": "value1"},
		Results: []Result{
			{
				Key: map[string]string{
					types.PrimaryKeyField: "bar",
				},
			},
		},
	}, `missing digest`)
	test("invalidDigest", GoldResults{
		GitHash: "aaa27ef254ad66609606c7af0730ee062b25edf9",
		Key:     map[string]string{"param1": "value1"},
		Results: []Result{
			{
				Key: map[string]string{
					types.PrimaryKeyField: "bar",
				},
				Digest: "not hexadecimal",
			},
		},
	}, `must be hexadecimal`)
	test("missingOptions", GoldResults{
		GitHash: "aaa27ef254ad66609606c7af0730ee062b25edf9",
		Key:     map[string]string{"param1": "value1"},
		Results: []Result{
			{
				Key: map[string]string{
					types.PrimaryKeyField: "bar",
				},
				Digest: "abc123",
				Options: map[string]string{
					"oops": "",
				},
			},
		},
	}, `with key "oops"`)
	test("missingOptions2", GoldResults{
		GitHash: "aaa27ef254ad66609606c7af0730ee062b25edf9",
		Key:     map[string]string{"param1": "value1"},
		Results: []Result{
			{
				Key: map[string]string{
					types.PrimaryKeyField: "bar",
					types.CorpusField:     "my corpus",
				},
				Digest: "abc123",
				Options: map[string]string{
					"": "missing",
				},
			},
		},
	}, `with value "missing"`)
	test("missingOptions3", GoldResults{
		GitHash: "aaa27ef254ad66609606c7af0730ee062b25edf9",
		Key:     map[string]string{"param1": "value1"},
		Results: []Result{
			{
				Key: map[string]string{
					types.PrimaryKeyField: "bar",
					types.CorpusField:     "my corpus",
				},
				Digest: "abc123",
				Options: map[string]string{
					"": "",
				},
			},
		},
	}, `empty key and value`)
	test("partialChangelistInfo", GoldResults{
		GitHash:          "aaa27ef254ad66609606c7af0730ee062b25edf9",
		Key:              map[string]string{"param1": "value1"},
		ChangelistID:     "missing_tryjob",
		CodeReviewSystem: "some_system",
		PatchsetOrder:    1,
	}, `all of or none of`)
	test("partialChangelistInfo2", GoldResults{
		Key:                         map[string]string{"param1": "value1"},
		ChangelistID:                "missing_patchset",
		CodeReviewSystem:            "some_system",
		PatchsetOrder:               0, // order, by definition, starts at 1
		TryJobID:                    "12345",
		ContinuousIntegrationSystem: "sandbucket",
	}, `all of or none of`)
	test("partialChangelistInfo3", GoldResults{
		GitHash:                     "aaa27ef254ad66609606c7af0730ee062b25edf9",
		Key:                         map[string]string{"param1": "value1"},
		TryJobID:                    "12345",
		ContinuousIntegrationSystem: "sandbucket",
	}, `all of or none of`)
	test("partialChangelistInfo4", GoldResults{
		GitHash:                     "aaa27ef254ad66609606c7af0730ee062b25edf9",
		Key:                         map[string]string{"param1": "value1"},
		ChangelistID:                "missing_patchset_id",
		CodeReviewSystem:            "some_system",
		PatchsetID:                  "",
		TryJobID:                    "12345",
		ContinuousIntegrationSystem: "sandbucket",
	}, `all of or none of`)
	test("partialChangelistInfo5", GoldResults{
		Key:                         map[string]string{"param1": "value1"},
		ChangelistID:                "missing_tryjob",
		CodeReviewSystem:            "some_system",
		PatchsetID:                  "12345",
		TryJobID:                    "",
		ContinuousIntegrationSystem: "sandbucket",
	}, `all of or none of`)
}

func TestValidate_ValidResults_Success(t *testing.T) {
	unittest.SmallTest(t)

	test := func(name string, toValidate GoldResults) {
		t.Run(name, func(t *testing.T) {
			err := toValidate.Validate()
			require.NoError(t, err)
		})
	}

	test("primaryBranch", GoldResults{
		GitHash: "aaa27ef254ad66609606c7af0730ee062b25edf9",
		Key:     map[string]string{"param1": "value1"},
		Results: []Result{
			{
				Key: map[string]string{
					types.PrimaryKeyField: "bar",
					types.CorpusField:     "my corpus",
				},
				Digest: "12345abc",
			},
		},
	})
	test("With CommitID And Metadata", GoldResults{
		CommitID:       "R89-13729.8.0",
		CommitMetadata: "gs://chromeos-image-archive/release/R89-13729.8.0/manifest.xml",
		Key:            map[string]string{"param1": "value1"},
		Results: []Result{
			{
				Key: map[string]string{
					types.PrimaryKeyField: "bar",
					types.CorpusField:     "my corpus",
				},
				Digest: "12345abc",
			},
		},
	})
	test("onChangelist", GoldResults{
		GitHash: "aaa27ef254ad66609606c7af0730ee062b25edf9",
		Key:     map[string]string{"param1": "value1"},
		Results: []Result{
			{
				Key: map[string]string{
					types.PrimaryKeyField: "bar",
					types.CorpusField:     "my corpus",
				},
				Digest: "12345abc",
			},
		},
		ChangelistID:                "123456",
		CodeReviewSystem:            "some_system",
		PatchsetOrder:               1,
		TryJobID:                    "12345",
		ContinuousIntegrationSystem: "sandbucket",
	})
	test("Data for CL without GitHash", GoldResults{
		Key: map[string]string{"param1": "value1"},
		Results: []Result{
			{
				Key: map[string]string{
					types.PrimaryKeyField: "bar",
					types.CorpusField:     "my corpus",
				},
				Digest: "12345abc",
			},
		},
		ChangelistID:                "123456",
		CodeReviewSystem:            "some_system",
		PatchsetOrder:               1,
		TryJobID:                    "12345",
		ContinuousIntegrationSystem: "sandbucket",
	})
	test("withPatchsetID", GoldResults{
		GitHash: "aaa27ef254ad66609606c7af0730ee062b25edf9",
		Key:     map[string]string{"param1": "value1"},
		Results: []Result{
			{
				Key: map[string]string{
					types.PrimaryKeyField: "bar",
					types.CorpusField:     "my corpus",
				},
				Digest: "12345abc",
			},
		},
		ChangelistID:                "123456",
		CodeReviewSystem:            "some_system",
		PatchsetID:                  "another id",
		TryJobID:                    "12345",
		ContinuousIntegrationSystem: "sandbucket",
	})
	test("test name and corpus in key", GoldResults{
		GitHash: "aaa27ef254ad66609606c7af0730ee062b25edf9",
		Key: map[string]string{
			types.CorpusField:     "my corpus",
			types.PrimaryKeyField: "bar",
		},
		Results: []Result{
			{
				Key: map[string]string{
					"param1": "value1",
				},
				Digest: "1234567890abcdef",
			},
		},
	})
}

// TestUpdateLegacyFields_Success tests a variety of valid inputs to make sure our parsing logic
// does not regress. It handles a variety of legacy and non legacy data.
func TestUpdateLegacyFields_Success(t *testing.T) {
	unittest.SmallTest(t)
	r := parseUpdateValidate(t, legacySkiaTryjobJSON)

	require.Equal(t, "c4711517219f333c1116f47706eb57b51b5f8fc7", r.GitHash)
	require.Equal(t, "12345", r.ChangelistID)
	require.Equal(t, 10, r.PatchsetOrder)
	require.Equal(t, "549340494940393", r.TryJobID)
	// When we detect a legacy system, default to gerrit and buildbucket
	require.Equal(t, "gerrit", r.CodeReviewSystem)
	require.Equal(t, "buildbucket", r.ContinuousIntegrationSystem)
	require.Len(t, r.Results, 3)

	r = parseUpdateValidate(t, legacySkiaJSON)
	require.Empty(t, r.ChangelistID)
	require.Empty(t, r.TryJobID)
	require.Equal(t, r.Results[0].Key[types.PrimaryKeyField], "skottie_multiframe")
	require.Contains(t, r.Results[0].Options, "color_type")

	r = parseUpdateValidate(t, legacyGoldCtlTryjobJSON)
	require.Equal(t, "1762193", r.ChangelistID)
	require.Equal(t, 2, r.PatchsetOrder)
	require.Equal(t, "8904604368086838672", r.TryJobID)
	// When we detect a legacy system, default to gerrit and buildbucket
	require.Equal(t, "gerrit", r.CodeReviewSystem)
	require.Equal(t, "buildbucket", r.ContinuousIntegrationSystem)
	require.Contains(t, r.Key, "vendor_id")

	r = parseUpdateValidate(t, goldCtlTryjobJSON)
	require.Equal(t, "1762193", r.ChangelistID)
	require.Equal(t, 2, r.PatchsetOrder)
	require.Equal(t, "8904604368086838672", r.TryJobID)
	require.Equal(t, "gerrit", r.CodeReviewSystem)
	require.Equal(t, "buildbucket", r.ContinuousIntegrationSystem)
	require.Contains(t, r.Key, "vendor_id")

	r = parseUpdateValidate(t, goldCtlTryjobPSIDJSON)
	require.Equal(t, "1762193", r.ChangelistID)
	require.Equal(t, "42191ad7b6f31d823d2d9904df24c0649ca3766c", r.PatchsetID)

	r = parseUpdateValidate(t, goldCtlMasterBranchJSON)
	require.Empty(t, r.ChangelistID)
	require.Empty(t, r.TryJobID)
	require.Equal(t, map[string]string{
		"device_id": "0x1cb3",
		"msaa":      "True",
	}, r.Key)

	r = parseUpdateValidate(t, legacyGoldCtlJSON)
	require.Empty(t, r.ChangelistID)
	require.Empty(t, r.TryJobID)
	require.Contains(t, r.Key, "vendor_id")

	r = parseUpdateValidate(t, legacyMasterBranchJSON)
	require.Empty(t, r.ChangelistID)
	require.Empty(t, r.TryJobID)

	r = parseUpdateValidate(t, negativeMasterBranchJSON)
	require.Empty(t, r.ChangelistID)
	require.Empty(t, r.TryJobID)

	r = parseUpdateValidate(t, emptyIssueJSON)
	require.Empty(t, r.ChangelistID)
	require.Empty(t, r.TryJobID)

	parseUpdateValidate(t, inverted_results)
}

func TestGenJson(t *testing.T) {
	unittest.SmallTest(t)

	// Test parsing the test JSON.
	goldResults := parseUpdateValidate(t, legacySkiaTryjobJSON)

	// For good measure we validate.
	err := goldResults.Validate()
	require.NoError(t, err)

	// Encode and decode the results.
	var buf bytes.Buffer
	require.NoError(t, json.NewEncoder(&buf).Encode(goldResults))
	newGoldResults := parseUpdateValidate(t, buf.String())
	require.Equal(t, goldResults, newGoldResults)
}

func parseUpdateValidate(t *testing.T, jsonStr string) *GoldResults {
	buf := bytes.NewBuffer([]byte(jsonStr))
	gr := &GoldResults{}
	require.NoError(t, json.NewDecoder(buf).Decode(gr))
	require.NoError(t, gr.UpdateLegacyFields())
	require.NoError(t, gr.Validate())
	return gr
}

const (
	// This is what Skia uploads before Aug 2019 when run on a tryjob, it
	// should continue to be valid if the schema changes (so we can re-ingest).
	legacySkiaTryjobJSON = `{
		"gitHash" : "c4711517219f333c1116f47706eb57b51b5f8fc7",
		"key" : {
			 "arch" : "arm64",
			 "compiler" : "Clang",
			 "configuration" : "Debug",
			 "cpu_or_gpu" : "GPU",
			 "cpu_or_gpu_value" : "PowerVRGT7600",
			 "extra_config" : "Metal",
			 "model" : "iPhone7",
			 "os" : "iOS"
		},
		"issue": "12345",
		"patchset": "10",
		"buildbucket_build_id" : "549340494940393",
		"builder" : "Test-Android-Clang-iPhone7-GPU-PowerVRGT7600-arm64-Debug-All-Metal",
		"swarming_bot_id" : "skia-rpi-102",
		"swarming_task_id" : "3fcd8d4a539ba311",
		"task_id" : "Xb0VhENPSRFGnf2elVQd",
		"results" : [
			 {
					"key" : {
						 "config" : "mtl",
						 "name" : "yuv_nv12_to_rgb_effect",
						 "source_type" : "gm"
					},
					"md5" : "30a470b6ac174aa1ffb54fcb77a21f21",
					"options" : {
						 "ext" : "png",
						 "gamma_correct" : "no"
					}
			 },
			 {
					"key" : {
						 "config" : "mtl",
						 "name" : "yuv_to_rgb_effect",
						 "source_type" : "gm"
					},
					"md5" : "0ea32027e1e651e4250797aa44bfadaa",
					"options" : {
						 "ext" : "png",
						 "gamma_correct" : "no"
					}
			 },
			 {
					"key" : {
						 "config" : "pipe-8888",
						 "name" : "clipcubic",
						 "source_type" : "gm"
					},
					"md5" : "64e446d96bebba035887dd7dda6db6c4",
					"options" : {
						 "ext" : "png"
					}
			 }
		]
}`

	legacySkiaJSON = `{
   "gitHash": "9c23a9e790b2f29b2cf204e67dbc67a363d0ce74",
   "builder": "Test-Android-Clang-Nexus7-CPU-Tegra3-arm-Release-All-Android",
   "buildbucket_build_id": "0",
   "task_id": "56CzL86rgSDVSkFVK28r",
   "swarming_bot_id": "skia-rpi-012",
   "swarming_task_id": "469891c521e43d11",
   "key": {
      "arch": "arm",
      "compiler": "Clang",
      "extra_config": "Android",
      "model": "Nexus7",
      "os": "Android",
      "style": "default"
   },
   "max_rss_MB": 274,
   "results": [
      {
         "key": {
            "name": "skottie_multiframe",
            "config": "8888",
            "source_type": "gm"
         },
         "options": {
            "ext": "png",
            "gamut": "untagged",
            "transfer_fn": "untagged",
            "color_type": "RGBA_8888",
            "alpha_type": "Premul",
            "color_depth": "8888"
         },
         "md5": "0abe3a2f7f58d2943f3b8b87f91dbff0"
      },
      {
         "key": {
            "name": "HTC.dng",
            "config": "8888",
            "source_type": "colorImage",
            "source_options": "decode_native"
         },
         "options": {
            "ext": "png",
            "gamut": "untagged",
            "transfer_fn": "untagged",
            "color_type": "RGBA_8888",
            "alpha_type": "Premul",
            "color_depth": "8888"
         },
         "md5": "9cb31c854f22413841354f98b22a9acc"
      },
      {
         "key": {
            "name": "HTC.dng",
            "config": "8888",
            "source_type": "colorImage",
            "source_options": "decode_to_dst"
         },
         "options": {
            "ext": "png",
            "gamut": "untagged",
            "transfer_fn": "untagged",
            "color_type": "RGBA_8888",
            "alpha_type": "Premul",
            "color_depth": "8888"
         },
         "md5": "9cb31c854f22413841354f98b22a9acc"
      }
   ]
}`

	legacyMasterBranchJSON = `{
		"gitHash" : "c4711517219f333c1116f47706eb57b51b5f8fc7",
		"key" : {
			"arch" : "arm64"
		},
		"results": [{
          "key":{"name": "abc", "source_type":"def"},
          "md5": "0123456789abcdef0123456789abcdef"
        }],
		"issue": "0"
	}`

	negativeMasterBranchJSON = `{
		"gitHash" : "c4711517219f333c1116f47706eb57b51b5f8fc7",
		"key" : {
			"arch" : "arm64"
		},
        "results": [{
          "key":{"name": "abc", "source_type":"def"},
          "md5": "0123456789abcdef0123456789abcdef"
        }],
		"issue": "-1"
	}`

	emptyIssueJSON = `{
		"gitHash" : "c4711517219f333c1116f47706eb57b51b5f8fc7",
		"key" : {
			"arch" : "arm64"
		},
		"issue": ""
	}`

	// This is what goldctl should spit out when running on the primary branch
	goldCtlMasterBranchJSON = `{
  "gitHash": "e1681c90cf6a4c3b6be2bc4b4cea59849c16a438",
  "key": {
    "device_id": "0x1cb3",
    "msaa": "True"
  },
  "results": [
    {
      "key": {
        "name": "Pixel_CanvasDisplayLinearRGBUnaccelerated2DGPUCompositing",
        "source_type": "chrome-gpu"
      },
      "options": {
        "ext": "png"
      },
      "md5": "690f72c0b56ae014c8ac66e7f25c0779"
    }
  ]
}`

	// This is what goldctl spits out before Aug 2019 when run on a tryjob, it
	// should continue to be valid if the schema changes (so we can re-ingest).
	legacyGoldCtlTryjobJSON = `{
  "gitHash": "e1681c90cf6a4c3b6be2bc4b4cea59849c16a438",
  "key": {
    "device_id": "0x1cb3",
    "device_string": "None",
    "msaa": "True",
    "vendor_id": "0x10de",
    "vendor_string": "None"
  },
  "results": [
    {
      "key": {
        "name": "Pixel_CanvasDisplayLinearRGBUnaccelerated2DGPUCompositing",
        "source_type": "chrome-gpu"
      },
      "options": {
        "ext": "png"
      },
      "md5": "690f72c0b56ae014c8ac66e7f25c0779"
    }
  ],
  "issue": "1762193",
  "buildbucket_build_id": "8904604368086838672",
  "patchset": "2",
  "builder": "",
  "task_id": ""
}`

	// This is what goldctl should spit out for a tryjob run starting after Sept 2019.
	goldCtlTryjobJSON = `{
  "gitHash": "e1681c90cf6a4c3b6be2bc4b4cea59849c16a438",
  "key": {
    "device_id": "0x1cb3",
    "device_string": "None",
    "msaa": "True",
    "vendor_id": "0x10de",
    "vendor_string": "None"
  },
  "results": [
    {
      "key": {
        "name": "Pixel_CanvasDisplayLinearRGBUnaccelerated2DGPUCompositing",
        "source_type": "chrome-gpu"
      },
      "options": {
        "ext": "png"
      },
      "md5": "690f72c0b56ae014c8ac66e7f25c0779"
    }
  ],
  "change_list_id": "1762193",
  "patch_set_order": 2,
  "crs": "gerrit",
  "try_job_id": "8904604368086838672",
  "cis": "buildbucket"
}`

	// This is what goldctl could spit out for a tryjob run when specifying patchset id
	// starting after Nov 2019.
	goldCtlTryjobPSIDJSON = `{
  "gitHash": "e1681c90cf6a4c3b6be2bc4b4cea59849c16a438",
  "key": {
    "device_id": "0x1cb3",
    "device_string": "None",
    "msaa": "True",
    "vendor_id": "0x10de",
    "vendor_string": "None"
  },
  "results": [
    {
      "key": {
        "name": "Pixel_CanvasDisplayLinearRGBUnaccelerated2DGPUCompositing",
        "source_type": "chrome-gpu"
      },
      "options": {
        "ext": "png"
      },
      "md5": "690f72c0b56ae014c8ac66e7f25c0779"
    }
  ],
  "change_list_id": "1762193",
  "patch_set_id": "42191ad7b6f31d823d2d9904df24c0649ca3766c",
  "crs": "gerrit",
  "try_job_id": "8904604368086838672",
  "cis": "buildbucket"
}`

	inverted_results = `{
  "description": "This file has data from two traces from the same test. It should re-use commit with id 0000000103",
  "gitHash" : "efbb705ff27b6a1a7e8ee36d219a7a0c41225771",
  "key" : {
    "name" : "square",
    "source_type" : "corners"
  },
  "results" : [
    {
      "key" : {
        "os" : "Windows10.3"
      },
      "md5" : "a02a02a02a02a02a02a02a02a02a02a0",
      "options" : {
        "ext" : "png"
      }
    },
    {
      "key" : {
        "os": "Android"
      },
      "md5" : "a02a02a02a02a02a02a02a02a02a02a0",
      "options" : {
        "ext" : "png",
        "image_matching_algorithm": "fuzzy",
        "fuzzy_max_different_pixels": "10",
        "fuzzy_pixel_delta_threshold": "20",
        "fuzzy_ignored_border_thickness": "0"
      }
    }
  ]
}`

	// This is what goldctl spits out before Aug 2019 when run on the waterfall, it
	// should continue to be valid if the schema changes (so we can re-ingest).
	legacyGoldCtlJSON = `{"gitHash":"7d3833876fb941a69bc3f49736eb8912c44156a8","key":{"device_id":"None","device_string":"Adreno (TM) 418","model_name":"Nexus 5X","msaa":"True","vendor_id":"None","vendor_string":"Qualcomm"},"results":[{"key":{"name":"Pixel_CanvasDisplayLinearRGBAccelerated2D","source_type":"chrome-gpu"},"options":{"ext":"png"},"md5":"301c213d21e2e0c8b0a0ddf5771453d2"}],"issue":"0","buildbucket_build_id":"0","patchset":"0","builder":"","task_id":""}`
)
