proto: check for required fields in encoding/decoding

Change-Id: I0555a92e0399782f075b1dcd248e880dd48c7d6d
Reviewed-on: https://go-review.googlesource.com/c/protobuf/+/170579
Reviewed-by: Herbie Ong <herbie@google.com>
diff --git a/internal/testprotos/test/test.proto b/internal/testprotos/test/test.proto
index 8cb9ec3..c6b2d6a 100644
--- a/internal/testprotos/test/test.proto
+++ b/internal/testprotos/test/test.proto
@@ -218,6 +218,30 @@
   }
 }
 
+message TestRequired {
+  required int32 required_field = 1;
+
+  extend TestAllExtensions {
+    optional TestRequired single = 1000;
+    repeated TestRequired multi  = 1001;
+  }
+}
+
+message TestRequiredForeign {
+  optional TestRequired    optional_message = 1;
+  repeated TestRequired    repeated_message = 2;
+  map<int32, TestRequired> map_message = 3;
+}
+
+message TestRequiredGroupFields {
+  optional group OptionalGroup = 1 {
+    required int32 a = 2;
+  }
+  repeated group RepeatedGroup = 3 {
+    required int32 a = 4;
+  }
+}
+
 // Test that RPC services work.
 message FooRequest  {}
 message FooResponse {}