<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);">
<span style="color: rgb(0, 0, 0); font-family: "Segoe UI", "Segoe UI Web (West European)", "Segoe UI", -apple-system, BlinkMacSystemFont, Roboto, "Helvetica Neue", sans-serif; font-size: 14.6667px; background-color: rgb(255, 255, 255); display: inline !important;">Reviewed-by:
 Nickle Wang <nickle.wang@hpe.com></span><br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);">
<span style="color: rgb(0, 0, 0); font-family: "Segoe UI", "Segoe UI Web (West European)", "Segoe UI", -apple-system, BlinkMacSystemFont, Roboto, "Helvetica Neue", sans-serif; font-size: 14.6667px; background-color: rgb(255, 255, 255); display: inline !important;"><br>
</span></div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);">
<span style="color: rgb(0, 0, 0); font-family: "Segoe UI", "Segoe UI Web (West European)", "Segoe UI", -apple-system, BlinkMacSystemFont, Roboto, "Helvetica Neue", sans-serif; font-size: 14.6667px; background-color: rgb(255, 255, 255); display: inline !important;">Thanks,</span></div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);">
<span style="color: rgb(0, 0, 0); font-family: "Segoe UI", "Segoe UI Web (West European)", "Segoe UI", -apple-system, BlinkMacSystemFont, Roboto, "Helvetica Neue", sans-serif; font-size: 14.6667px; background-color: rgb(255, 255, 255); display: inline !important;">Nickle</span></div>
<div id="appendonsend"></div>
<hr style="display:inline-block;width:98%" tabindex="-1">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" style="font-size:11pt" color="#000000"><b>From:</b> Chang, Abner (HPS SW/FW Technologist) <abner.chang@hpe.com><br>
<b>Sent:</b> Thursday, July 22, 2021 14:08<br>
<b>To:</b> devel@edk2.groups.io <devel@edk2.groups.io><br>
<b>Cc:</b> Wang, Nickle (HPS SW) <nickle.wang@hpe.com>; Liming Gao <gaoliming@byosoft.com.cn><br>
<b>Subject:</b> [staging/edk2-redfish-client Tools PATCH 4/6] RedfishClientPkg/Redfish-Profile-Simulator: HTTP methods on Memory Collection</font>
<div> </div>
</div>
<div class="BodyFragment"><font size="2"><span style="font-size:11pt;">
<div class="PlainText">Add POST and PATCH methods on Memory collection and resource.<br>
<br>
Signed-off-by: Abner Chang <abner.chang@hpe.com><br>
Cc: Nickle Wang <nickle.wang@hpe.com><br>
Cc: Liming Gao <gaoliming@byosoft.com.cn><br>
---<br>
 .../v1sim/redfishURIs.py                      | 25 +++++++++++<br>
 .../v1sim/systems.py                          | 43 +++++++++++++++++++<br>
 2 files changed, 68 insertions(+)<br>
<br>
diff --git a/RedfishClientPkg/Tools/Redfish-Profile-Simulator/v1sim/redfishURIs.py b/RedfishClientPkg/Tools/Redfish-Profile-Simulator/v1sim/redfishURIs.py<br>
index 3c912f7ce1..35d3794cc6 100644<br>
--- a/RedfishClientPkg/Tools/Redfish-Profile-Simulator/v1sim/redfishURIs.py<br>
+++ b/RedfishClientPkg/Tools/Redfish-Profile-Simulator/v1sim/redfishURIs.py<br>
@@ -1,6 +1,7 @@<br>
 #<br>
 # Copyright Notice:<br>
 # Copyright (c) 2019, Intel Corporation. All rights reserved.<BR><br>
+# (C) Copyright 2021 Hewlett Packard Enterprise Development LP<BR><br>
 # SPDX-License-Identifier: BSD-2-Clause-Patent<br>
 #<br>
 # Copyright Notice:<br>
@@ -308,6 +309,30 @@ def rfApi_SimpleServer(root, versions, host="127.0.0.1", port=5000, cert="", key<br>
         else:<br>
             return err_string, status_code<br>
 <br>
+    @app.route("/redfish/v1/Systems/<string:system_id>/Memory", methods=['POST'])<br>
+    @auth.rfAuthRequired<br>
+    def rf_computer_memory_post(system_id):<br>
+        print ("in POST memory collection")<br>
+        rdata = json.loads(request.data,object_pairs_hook=OrderedDict)<br>
+        print("rdata:{}".format(rdata))<br>
+        rc, status_code, err_string, resp = root.components['Systems'].get_element(system_id).components['Memory'].post_resource(rdata)<br>
+        if rc == 0:<br>
+            return resp, status_code<br>
+        else:<br>
+            return err_string, status_code<br>
+<br>
+    @app.route("/redfish/v1/Systems/<string:system_id>/Memory/<string:MemoryIdx>", methods=['PATCH'])<br>
+    @auth.rfAuthRequired<br>
+    def rf_computer_memory_patch(system_id, MemoryIdx):<br>
+        print ("in PATCH memory[%s] resource" % MemoryIdx)<br>
+        rdata = json.loads(request.data,object_pairs_hook=OrderedDict)<br>
+        print("rdata:{}".format(rdata))<br>
+        rc, status_code, err_string, resp = root.components['Systems'].get_element(system_id).components['Memory'].patch_memory(MemoryIdx, rdata)<br>
+        if rc == 0:<br>
+            return resp, status_code<br>
+        else:<br>
+            return err_string, status_code<br>
+<br>
     def resolve_path(service, path):<br>
         parts = path.split('/')<br>
         result = service<br>
diff --git a/RedfishClientPkg/Tools/Redfish-Profile-Simulator/v1sim/systems.py b/RedfishClientPkg/Tools/Redfish-Profile-Simulator/v1sim/systems.py<br>
index b8b3788054..690101fb10 100644<br>
--- a/RedfishClientPkg/Tools/Redfish-Profile-Simulator/v1sim/systems.py<br>
+++ b/RedfishClientPkg/Tools/Redfish-Profile-Simulator/v1sim/systems.py<br>
@@ -2,6 +2,7 @@<br>
 # Copyright Notice:<br>
 #<br>
 # Copyright (c) 2019, Intel Corporation. All rights reserved.<BR><br>
+# (C) Copyright 2021 Hewlett Packard Enterprise Development LP<BR><br>
 # SPDX-License-Identifier: BSD-2-Clause-Patent<br>
 #<br>
 # Copyright Notice:<br>
@@ -123,9 +124,50 @@ class RfSystemObj(RfResource):<br>
 <br>
 # subclass Logs Collection<br>
 class RfMemoryCollection(RfCollection):<br>
+    def final_init_processing(self, base_path, rel_path):<br>
+        self.maxIdx = self.res_data["Members@odata.count"]<br>
+<br>
     def element_type(self):<br>
         return RfMemory<br>
 <br>
+    def post_resource(self, post_data):<br>
+        print("Members@odata.count:{}".format(self.res_data["Members@odata.count"]))<br>
+        print("Members:{}".format(self.res_data["Members"]))<br>
+        print("post_data:{}".format(post_data))<br>
+<br>
+        self.res_data["Members@odata.count"] = self.res_data["Members@odata.count"] + 1<br>
+        self.maxIdx = self.maxIdx + 1<br>
+        newMemoryIdx = self.maxIdx<br>
+        newMemoryUrl = self.res_data["@odata.id"] + "/" + str(newMemoryIdx)<br>
+        self.res_data["Members"].append({"@odata.id":newMemoryUrl})<br>
+<br>
+        post_data["@odata.id"] = newMemoryUrl<br>
+        self.elements[str(newMemoryIdx)] = post_data<br>
+<br>
+        resp = flask.Response(json.dumps(post_data,indent=4))<br>
+        resp.headers["Location"] = newMemoryUrl<br>
+        return 0, 200, None, resp<br>
+<br>
+    def patch_memory(self, Idx, patch_data):<br>
+        self.elements[str(Idx)] = {**self.elements[str(Idx)], **patch_data}<br>
+        resp = flask.Response(json.dumps(self.elements[str(Idx)],indent=4))<br>
+        return 0, 200, None, resp<br>
+<br>
+    def get_memory(self, Idx):<br>
+        return json.dumps(self.elements[Idx],indent=4)<br>
+<br>
+    def delete_memory(self, Idx):<br>
+        print("in delete_memory")<br>
+<br>
+        resp = flask.Response(json.dumps(self.elements[Idx],indent=4))<br>
+<br>
+        self.elements.pop(Idx)<br>
+        self.res_data["Members@odata.count"] = self.res_data["Members@odata.count"] - 1<br>
+<br>
+        newMemoryUrl = self.res_data["@odata.id"] + "/" + str(Idx)<br>
+        self.res_data["Members"].remove({"@odata.id":newMemoryUrl})<br>
+        return 0, 200, None, resp<br>
+<br>
 <br>
 class RfMemory(RfResource):<br>
     pass<br>
@@ -267,3 +309,4 @@ class RfBootOptionCollection(RfCollection):<br>
         return 0, 200, None, resp<br>
 <br>
 class RfBootOption(RfResource):<br>
+    pass<br>
-- <br>
2.17.1<br>
<br>
</div>
</span></font></div>
</body>
</html>


 <div width="1" style="color:white;clear:both">_._,_._,_</div> <hr>   Groups.io Links:<p>   You receive all messages sent to this group.    <p> <a target="_blank" href="https://edk2.groups.io/g/devel/message/78094">View/Reply Online (#78094)</a> |    |  <a target="_blank" href="https://groups.io/mt/84374363/1813853">Mute This Topic</a>  | <a href="https://edk2.groups.io/g/devel/post">New Topic</a><br>    <a href="https://edk2.groups.io/g/devel/editsub/1813853">Your Subscription</a> | <a href="mailto:devel+owner@edk2.groups.io">Contact Group Owner</a> |  <a href="https://edk2.groups.io/g/devel/unsub">Unsubscribe</a>  [edk2-devel-archive@redhat.com]<br> <div width="1" style="color:white;clear:both">_._,_._,_</div>