@@ -394,9 +394,13 @@ var _ = Describe("NIMServiceReconciler for a standalone platform", func() {
394394
395395 // Start mock test server to serve nimservice endpoint.
396396 testServerHandler = http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
397- w .WriteHeader (http .StatusOK )
398- _ , err := w .Write ([]byte (`{"object": "list", "data":[{"id": "dummy-model", "object": "model", "root": "dummy-model", "parent": null}]}` ))
399- Expect (err ).ToNot (HaveOccurred ())
397+ if r .URL .Path == "/v1/models" {
398+ w .WriteHeader (http .StatusOK )
399+ _ , err := w .Write ([]byte (`{"object": "list", "data":[{"id": "dummy-model", "object": "model", "root": "dummy-model", "parent": null}]}` ))
400+ Expect (err ).ToNot (HaveOccurred ())
401+ } else {
402+ w .WriteHeader (http .StatusNotFound )
403+ }
400404 })
401405 testServer = httptest .NewServer (testServerHandler )
402406 http .DefaultTransport = & mockTransport {
@@ -772,9 +776,13 @@ var _ = Describe("NIMServiceReconciler for a standalone platform", func() {
772776
773777 It ("should fail when models response is unmarshallable" , func () {
774778 testServer .Config .Handler = http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
775- w .WriteHeader (http .StatusOK )
776- _ , err := w .Write ([]byte (`{"data": "invalid response"}` ))
777- Expect (err ).ToNot (HaveOccurred ())
779+ if r .URL .Path == "/v1/models" {
780+ w .WriteHeader (http .StatusOK )
781+ _ , err := w .Write ([]byte (`{"data": "invalid response"}` ))
782+ Expect (err ).ToNot (HaveOccurred ())
783+ } else {
784+ w .WriteHeader (http .StatusNotFound )
785+ }
778786 })
779787 svc := & corev1.Service {
780788 ObjectMeta : metav1.ObjectMeta {
@@ -800,10 +808,14 @@ var _ = Describe("NIMServiceReconciler for a standalone platform", func() {
800808
801809 It ("should have empty model name when it cannot be inferred" , func () {
802810 testServer .Config .Handler = http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
803- w .WriteHeader (http .StatusOK )
804- // Set dummy object type for model.
805- _ , err := w .Write ([]byte (`{"object": "list", "data":[{"id": "dummy-model", "object": "dummy", "root": "dummy-model", "parent": null}]}` ))
806- Expect (err ).ToNot (HaveOccurred ())
811+ if r .URL .Path == "/v1/models" {
812+ w .WriteHeader (http .StatusOK )
813+ // Set dummy object type for model.
814+ _ , err := w .Write ([]byte (`{"object": "list", "data":[{"id": "dummy-model", "object": "dummy", "root": "dummy-model", "parent": null}]}` ))
815+ Expect (err ).ToNot (HaveOccurred ())
816+ } else {
817+ w .WriteHeader (http .StatusNotFound )
818+ }
807819 })
808820 svc := & corev1.Service {
809821 ObjectMeta : metav1.ObjectMeta {
@@ -857,10 +869,14 @@ var _ = Describe("NIMServiceReconciler for a standalone platform", func() {
857869
858870 It ("should succeed when nimservice has lora adapter models attached" , func () {
859871 testServer .Config .Handler = http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
860- w .WriteHeader (http .StatusOK )
861- // Set dummy object type for model.
862- _ , err := w .Write ([]byte (`{"object": "list", "data":[{"id": "dummy-model-adapter1", "object": "model", "root": "dummy-model", "parent": null}, {"id": "dummy-model-adapter2", "object": "model", "root": "dummy-model", "parent": null}, {"id": "dummy-model", "object": "model", "root": "dummy-model", "parent": null}]}` ))
863- Expect (err ).ToNot (HaveOccurred ())
872+ if r .URL .Path == "/v1/models" {
873+ w .WriteHeader (http .StatusOK )
874+ // Set dummy object type for model.
875+ _ , err := w .Write ([]byte (`{"object": "list", "data":[{"id": "dummy-model-adapter1", "object": "model", "root": "dummy-model", "parent": null}, {"id": "dummy-model-adapter2", "object": "model", "root": "dummy-model", "parent": null}, {"id": "dummy-model", "object": "model", "root": "dummy-model", "parent": null}]}` ))
876+ Expect (err ).ToNot (HaveOccurred ())
877+ } else {
878+ w .WriteHeader (http .StatusNotFound )
879+ }
864880 })
865881 svc := & corev1.Service {
866882 ObjectMeta : metav1.ObjectMeta {
@@ -888,6 +904,46 @@ var _ = Describe("NIMServiceReconciler for a standalone platform", func() {
888904 Expect (modelStatus .Name ).To (Equal ("dummy-model" ))
889905 })
890906
907+ Context ("when nimservice only supports /v1/metadata" , func () {
908+ It ("should succeed when nimservice only supports /v1/metadata" , func () {
909+ testServer .Config .Handler = http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
910+ if r .URL .Path == "/v1/models" {
911+ w .WriteHeader (http .StatusNotFound )
912+ } else if r .URL .Path == "/v1/metadata" {
913+ w .WriteHeader (http .StatusOK )
914+ _ , err := w .Write ([]byte (`{"modelInfo": [{"shortName": "dummy-model:dummy-version", "modelUrl": "ngc://org/team/dummy-model:dummy-version"}]}` ))
915+ Expect (err ).ToNot (HaveOccurred ())
916+ } else {
917+ w .WriteHeader (http .StatusNotFound )
918+ }
919+ })
920+ svc := & corev1.Service {
921+ ObjectMeta : metav1.ObjectMeta {
922+ Name : "test-nimservice" ,
923+ Namespace : "default" ,
924+ },
925+ Spec : corev1.ServiceSpec {
926+ Type : corev1 .ServiceTypeClusterIP ,
927+ ClusterIP : "127.0.0.1" ,
928+ Ports : []corev1.ServicePort {
929+ {
930+ Port : 8123 ,
931+ Name : "service-port" ,
932+ },
933+ },
934+ },
935+ }
936+ _ = client .Create (context .TODO (), svc )
937+ err := reconciler .updateModelStatus (context .Background (), nimService )
938+ Expect (err ).ToNot (HaveOccurred ())
939+ modelStatus := nimService .Status .Model
940+ Expect (modelStatus ).ToNot (BeNil ())
941+ Expect (modelStatus .ClusterEndpoint ).To (Equal ("127.0.0.1:8123" ))
942+ Expect (modelStatus .ExternalEndpoint ).To (Equal ("test-nimservice.default.example.com" ))
943+ Expect (modelStatus .Name ).To (Equal ("dummy-model" ))
944+
945+ })
946+ })
891947 })
892948
893949 Describe ("getNIMModelEndpoints" , func () {
0 commit comments