[gold] Move mapper.IsValidDiffImgID to validation package.

Bug: skia:9350
Change-Id: I38c7eb9a0661c17f35983d22ebd65ca21afcd045
Reviewed-on: https://skia-review.googlesource.com/c/buildbot/+/236118
Auto-Submit: Leandro Lovisolo <lovisolo@google.com>
Commit-Queue: Kevin Lubick <kjlubick@google.com>
Reviewed-by: Kevin Lubick <kjlubick@google.com>
diff --git a/golden/go/diffstore/mapper/mapper.go b/golden/go/diffstore/mapper/mapper.go
index 48d824c..5417c2e 100644
--- a/golden/go/diffstore/mapper/mapper.go
+++ b/golden/go/diffstore/mapper/mapper.go
@@ -6,7 +6,6 @@
 
 	"go.skia.org/infra/go/util"
 	"go.skia.org/infra/golden/go/types"
-	"go.skia.org/infra/golden/go/validation"
 )
 
 // Mapper is the interface to define how the diff metric between two images
@@ -51,15 +50,6 @@
 	return types.Digest(imageIDs[0]), types.Digest(imageIDs[1])
 }
 
-// IsValidDiffImgID returns true if the given diffImgID is in the correct format.
-func IsValidDiffImgID(diffID string) bool {
-	imageIDs := strings.Split(diffID, DiffImageSeparator)
-	if len(imageIDs) != 2 {
-		return false
-	}
-	return validation.IsValidDigest(imageIDs[0]) && validation.IsValidDigest(imageIDs[1])
-}
-
 func getOrderedDiffID(left, right types.Digest) (types.Digest, types.Digest, string) {
 	if right < left {
 		// Make sure the smaller digest is left imageID.
diff --git a/golden/go/diffstore/mem_diffstore.go b/golden/go/diffstore/mem_diffstore.go
index e696f70..c59bf5e 100644
--- a/golden/go/diffstore/mem_diffstore.go
+++ b/golden/go/diffstore/mem_diffstore.go
@@ -294,7 +294,7 @@
 			fileServer.ServeHTTP(w, r)
 		} else {
 			// Validate the requested diff image ID.
-			if !mapper.IsValidDiffImgID(imgID) {
+			if !validation.IsValidDiffImgID(imgID) {
 				noCacheNotFound(w, r)
 				return
 			}
diff --git a/golden/go/validation/validation.go b/golden/go/validation/validation.go
index 998bd6f..aed72d2 100644
--- a/golden/go/validation/validation.go
+++ b/golden/go/validation/validation.go
@@ -1,5 +1,11 @@
 package validation
 
+import (
+	"strings"
+
+	"go.skia.org/infra/golden/go/diffstore/mapper"
+)
+
 // IsValidDigest returns true if the given string is a valid digest
 // on the string level, i.e. it does not check whether we have
 // actually seen the given hash but whether it complies with the format
@@ -20,3 +26,12 @@
 	}
 	return true
 }
+
+// IsValidDiffImgID returns true if the given diffImgID is in the correct format.
+func IsValidDiffImgID(diffID string) bool {
+	imageIDs := strings.Split(diffID, mapper.DiffImageSeparator)
+	if len(imageIDs) != 2 {
+		return false
+	}
+	return IsValidDigest(imageIDs[0]) && IsValidDigest(imageIDs[1])
+}
diff --git a/golden/go/validation/validation_test.go b/golden/go/validation/validation_test.go
index 5ca583c..bf501e2 100644
--- a/golden/go/validation/validation_test.go
+++ b/golden/go/validation/validation_test.go
@@ -17,3 +17,15 @@
 	assert.False(t, IsValidDigest("766923700b970e4e7ECf9508b8455e0x"))
 	assert.False(t, IsValidDigest("766923700b970e4e7ecf08b8455e0f"))
 }
+
+func TestIsValidDiffImgID(t *testing.T) {
+	unittest.SmallTest(t)
+
+	assert.False(t, IsValidDiffImgID(""))
+	assert.False(t, IsValidDiffImgID("nope"))
+	assert.False(t, IsValidDiffImgID("098f6b-1660f0783f4076284bc18c5f4bdc9608"))
+	assert.False(t, IsValidDiffImgID("098f6bcd4621d373cade4e832627b4f6-1660f0"))
+	assert.False(t, IsValidDiffImgID("HELLOWORLD21d373cade4e832627b4f6-1660f0783f4076284bc18c5f4bdc9608"))
+	assert.False(t, IsValidDiffImgID("098f6bcd4621d373cade4e832627b4f6-HELLOWORLD4076284bc18c5f4bdc9608"))
+	assert.True(t, IsValidDiffImgID("098f6bcd4621d373cade4e832627b4f6-1660f0783f4076284bc18c5f4bdc9608"))
+}